c++ - 在C++中实现多个接口(interface)

标签 c++ oop

我的界面层次结构如下:

class A
{
public:
 void foo() = 0;
};

class B: public A
{
public:
void testB() = 0;
};

class C: public A
{
public:
void testC() = 0;
};

现在,我想通过相同的层次结构实现这些接口(interface),即基类 AImplBImplCImpl 但我不确定如何从相应的接口(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/

相关文章:

design-patterns - 用于验证的 OO 设计模式

c++ - 将 Rcpp 对象分配到 Rcpp 列表中会产生最后一个元素的拷贝

c++ - 有没有办法忽略 hg blame 中的提交?

c++ - 为请求的网页接收多个 loadFinished 信号

c++ - 奇怪的 C++ 警告

c++ - 是否可以组合对称代码段?

c++ - 在 x 次循环后退出 while 循环

javascript - jQuery、Javascript、对象表示法 - 回调行为差异的解释

php - 任何 PHP 函数会去除对象的空属性?

c++ - 让单元测试成为它正在测试的类的 friend 有什么问题?