Для следования из моего предыдущего вопроса о виртуальном и множественном наследовании (в кросс-платформенном сценарии) - после чтения некоторых ответов мне пришло в голову, что я мог упростить свою модель путем хранения сервера и клиентских классов, и замены платформы определенные классы #ifdefs (который является тем, что я собирался сделать первоначально).
Будет использование этого кода быть более простым? Это означало бы, что, по крайней мере, будет меньше файлов! Оборотная сторона - то, что это создает несколько "ужасное" и немного более твердое для чтения Foobar
класс с тех пор существует #ifdefs
повсеместно. Обратите внимание, что наш Unix, исходный код Foobar никогда не будет передаваться компилятору, таким образом, это будет иметь тот же эффект как #ifdef
(так как мы также использовали бы #ifdef
решить что платформа определенный класс для вызова).
class Foobar {
public:
int someData;
#if WINDOWS
void someWinFunc1();
void someWinFunc2();
#elif UNIX
void someUnixFunc1();
void someUnixFunc2();
#endif
void crossPlatformFunc();
};
class FoobarClient : public Foobar;
class FoobarServer : public Foobar;
Примечание: Некоторый материал (ctor, и т.д.) не учтенный для более простого примера.
Для тех, кто хочет читать больше в фон этой проблемы, я действительно предлагаю скользить по соответствующему потоку списка рассылки. Вещь начинает становиться интересной вокруг 3-го сообщения. Также существует связанная фиксация кода, с которой Вы видите реальный рассматриваемый код здесь.