我可以在这里避免多重继承吗?

时间:2013-02-22 18:45:30

标签: c++ multiple-inheritance

我处于一种我将要进行多重继承的情况(以及恐惧之类的钻石)。我希望避免这种情况,所以希望有人有想法以另一种方式做到这一点。

我想创建一个处理网络连接的库。我有一个抽象工厂,其方法是创建一个tcpServer,tcpClient,udp,以及一个从目录创建条目的最后一个方法(配置文件被赋予工厂的init方法)。所以我已经为这种连接创建了类(实际上是接口)。 Entry是基础接口。为简化起见,我们只是说它有设置数据和状态回调的方法。所有其他类(tcpClient ...)都继承自这个类。

我想使用boost来实现这个工厂,所以我必须实现所有类(tcpServer,...)。问题是所有类实现都需要一个共同的基础。这就是我要做的事情,但我不确定这是否正确:

以下是摘要部分:

// The abstract factory:
class Factory
{
    virtual IO::TcpServer* createTcpServer() = 0;
    virtual IO::TcpClient* createTcpClient() = 0;

    virtual IO::Entry* createFromConf() = 0;
};  


// The Entry interface: 
class Entry {
    virtual bool isChild() const = 0;
    // ...

    virtual void setDataCbk() = 0;
    virtual void setStateCbk() = 0;
};

// TcpClient interface
class TcpClient : public IO::Entry {
    /* Nothing yet but stuff will come */
}; 

这是boost实现(类名相同,但在不同的名称空间中;我不显示工厂实现):

// Entry first step of implementation (still abstract)
class Entry : public IO::Entry
{
    virtual void setDataCbk();
    virtual void setStateCbk();
};

// Flat entry : entry that can't have child (like tcp client, udp ...)
class FlatEntry : public IO::Boost::Entry
{
    virtual bool isChild() const; // Will always return false
    // ...
};

// The final TcpClient implementation
class TcpClient : public IO::TcpClient
            , public IO::Boost::FlatEntry
{
    // ...
};

所以我担心这个多重继承的事情。另一方面,super classe是一个纯粹的接口(没有数据,只有纯虚方法)。有什么想法吗?

0 个答案:

没有答案