Кто-нибудь знает, возможно ли иметь частичное определение класса на С++?
Что-то вроде:
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(), но есть другие способы избежать этого.