按照我之前关于虚拟和多重继承的问题(在跨平台场景中) - 在阅读了一些答案之后,我想到我可以通过保留服务器和客户端类来简化我的模型,并将平台特定的类替换为#ifdefs(这是我最初要做的)。
使用这段代码会更简单吗?这意味着至少会有更少的文件!缺点是它创建了一个有点“丑陋”并且稍微难以阅读Foobar
的课程,因为到处#ifdefs
都是。#ifdef
请注意,我们的 Unix Foobar 源代码将永远不会传递给编译器,因此这与(因为我们还使用#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 篇文章中变得有趣起来。还有一个相关的代码提交,您可以在这里看到有问题的真实代码。