这是我们理想的继承层次结构:
class Foobar;
class FoobarClient : Foobar;
class FoobarServer : Foobar;
class WindowsFoobar : Foobar;
class UnixFoobar : Foobar;
class WindowsFoobarClient : WindowsFoobar, FoobarClient;
class WindowsFoobarServer : WindowsFoobar, FoobarServer;
class UnixFoobarClient : UnixFoobar, FoobarClient;
class UnixFoobarServer : UnixFoobar, FoobarServer;
这是因为我们的继承层次结构会尝试从Foobar
两次继承,因此,编译器会抱怨对Foobar
.
请允许我解释一下为什么我想要这样一个复杂的模型。WindowsFoobar
这是因为我们希望从、UnixFoobar
、FoobarClient
和访问相同的变量FoobarServer
。这不是问题,只是我想使用以上任意组合的多重继承,这样我就可以在任何平台上使用服务器/客户端功能,也可以在客户端或服务器上使用平台功能。
我不禁觉得这是多重继承的一个常见问题......我是从完全错误的角度解决这个问题吗?
更新1:
另外,考虑到我们可以用#ifdef
它来解决这个问题,但是,这往往会产生非常丑陋的代码,如下所示:
CFoobar::CFoobar()
#if SYSAPI_WIN32
: m_someData(1234)
#endif
{
}
......糟糕!
更新 2:
对于那些想要了解更多关于这个问题的背景的人,我真的建议浏览相应的邮件列表线程。事情开始在第 3 篇文章中变得有趣起来。还有一个相关的代码提交,您可以在这里看到有问题的真实代码。