我的界面层次结构如下:
class A
{
public:
void foo() = 0;
};
class B: public A
{
public:
void testB() = 0;
};
class C: public A
{
public:
void testC() = 0;
};
现在,我想通过相同的层次结构实现这些接口(interface),即基类 AImpl
、BImpl
和 CImpl
但我不确定如何从相应的接口(interface)派生它们。
请帮忙。 提前致谢。
最佳答案
您可以使用单独的模板实现每个单独的接口(interface),然后链接模板以构建派生对象,就像构建 block 一样。古老的 ATL 库也使用这种方法来实现 COM 接口(interface)(对于我们这些足够老的人来说)。
请注意,您不需要虚拟继承。
我稍微修改了你的示例以获得更复杂的推导 C -> B -> A
以显示此方法如何轻松扩展:
#include <stdio.h>
// Interfaces
struct A
{
virtual void foo() = 0;
};
struct B : A
{
virtual void testB() = 0;
};
struct C : B
{
virtual void testC() = 0;
};
// Implementations
template<class I>
struct AImpl : I
{
void foo() { printf("%s\n", __PRETTY_FUNCTION__); }
};
template<class I>
struct BImpl : I
{
void testB() { printf("%s\n", __PRETTY_FUNCTION__); }
};
template<class I>
struct CImpl : I
{
void testC() { printf("%s\n", __PRETTY_FUNCTION__); }
};
// Usage
int main() {
// Compose derived objects from templates as from building blocks.
AImpl<A> a;
BImpl<AImpl<B> > b;
CImpl<BImpl<AImpl<C> > > c;
a.foo();
b.foo();
b.testB();
c.foo();
c.testB();
c.testC();
}
输出:
void AImpl<I>::foo() [with I = A]
void AImpl<I>::foo() [with I = B]
void BImpl<I>::testB() [with I = AImpl<B>]
void AImpl<I>::foo() [with I = C]
void BImpl<I>::testB() [with I = AImpl<C>]
void CImpl<I>::testC() [with I = BImpl<AImpl<C> >]
关于c++ - 在C++中实现多个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647114/