C ++多重继承 - 带模板的钻石

时间:2014-03-06 09:34:28

标签: c++ templates inheritance virtual

从模板的多个实例继承时遇到问题。

我的类Bridge尝试从2个BridgeTemplate实例继承,所以当我们尝试调用BridgeTemplate的'set'函数时,编译器会出错(“模糊不清......”)。但是,如果Bridge只从1个实例继承,那么一切正常。

下面是模板和类Bridge的一段代码。提前致谢

template <class DataType, class DataWriter>
class BridgeTemplate : public BridgeGeneric
{
    public:
        void set(DataType a, DataWriter b)
        {
            std::cout << "a: " << a << "; b: " << b << std::endl;
        }
...
};

class Bridge : public virtual BridgeTemplate<int,float>, public virtual BridgeTemplate<float,int>
{
...
}

1 个答案:

答案 0 :(得分:1)

参数类型无关紧要。

错误消息适用于名称查找,而不是重载决策。所有重载的函数必须来自同一个类或命名空间。为了确保这一点,请使用以下模式:

 class Child : public Dad, public Mom {
     using Dad::func;
     using Mom::func;
 };

 // ...

 Child c;
 c.foo(1, 2.3);

由于using声明,两个func成员都被带到Child命名空间,并且查找不再含糊不清。