【发布时间】:2010-01-02 00:22:50
【问题描述】:
遵循我的previous question about virtual and multiple inheritance(在跨平台场景中) - 在阅读了一些答案后,我想到我可以通过保留服务器和客户端类来简化我的模型,并用 # 替换特定于平台的类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 等)。
更新:
对于那些想进一步了解本期背景的人,我真的建议浏览一下适当的mailing list thread。事情开始在第 3 篇文章中变得有趣起来。还有一个related code commit,你可以在这里看到真实的代码。
【问题讨论】:
-
我的偏好是使用继承并创建
class FuncsWin32 : public Foobar和class FuncsUnix : public Foobar。这允许构建器包含适当的小部件,而无需关心程序的其余部分。
标签: c++ cross-platform multiple-inheritance conditional-compilation