Кто-нибудь знает, возможно ли иметь частичное определение класса на С++?
Что-то вроде:
file1.h:
class Test { public: int test1(); };
file2.h:
class Test { public: int test2(); };
Для меня это кажется весьма полезным для определения многоплатформенных классов, которые имеют общие функции между ними, которые не зависят от платформы, поскольку наследование - это плата за оплату, которая не подходит для многоплатформенных классов.
Я имею в виду, что во время выполнения у вас никогда не будет двух экземпляров мультиплатформенной специализации, только во время компиляции. Наследование может быть полезно для удовлетворения ваших потребностей в публичном интерфейсе, но после этого оно не добавит ничего полезного во время выполнения, просто издержки.
Также вам придется использовать уродливый #ifdef для использования класса, потому что вы не можете сделать экземпляр из абстрактного класса:
class genericTest { public: int genericMethod(); };
Затем скажем, для win32:
class win32Test: public genericTest { public: int win32Method(); };
А может быть:
class macTest: public genericTest { public: int macMethod(); };
Предположим, что оба метода win32Method() и macMethod() вызывают genericMethod(), и вам придется использовать класс следующим образом:
#ifdef _WIN32 genericTest *test = new win32Test(); #elif MAC genericTest *test = new macTest(); #endif test->genericMethod();
Теперь, думая, что наследование было полезно только для предоставления им как genericMethod(), зависящего от конкретной платформы, но из-за этого у вас есть стоимость вызова двух конструкторов. Также у вас есть уродливый #ifdef, разбросанный по всему коду.
Вот почему я искал частичные классы. Я мог бы во время компиляции определить конкретный частичный конец, зависящий от платформы, конечно, что в этом глупом примере мне все еще нужен уродливый #ifdef внутри genericMethod(), но есть другие способы избежать этого.