我有这样的公共接口层次结构:
struct ISwitchable {
/* Obtain pointer to another implemented interface of the same instance. */
virtual int switch(unsigned int interfaceId, void** pInstance) = 0;
};
struct IFoo : public ISwitchable { /* Methods */ };
struct IBar : public ISwitchable { /* Methods */ };
struct IFooBar : public IFoo, public IBar { /* Methods */ };
实现 IFooBar 的类与工厂函数一起放入 dll 中。客户端代码加载 dll,使用工厂函数创建类实例并根据接口使用它(它们作为头文件提供)。
Scheme 适用于 MSVC 制作的 dll 和 Borland C++ Builder 6 制作的客户端代码。
我将虚拟继承引入层次结构:
struct IFoo : public virtual ISwitchable { /* Methods */ };
struct IBar : public virtual ISwitchable { /* Methods */ };
当在相同的情况下(MSVC 的 dll,Builder 的客户端)客户端代码请求类的实例时,他用凌乱的 vtable 得到它。
除了回滚到普通继承之外,还有其他解决方案吗?