从模板的多个实例继承时遇到问题。
我的类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>
{
...
}
答案 0 :(得分:1)
参数类型无关紧要。
错误消息适用于名称查找,而不是重载决策。所有重载的函数必须来自同一个类或命名空间。为了确保这一点,请使用以下模式:
class Child : public Dad, public Mom {
using Dad::func;
using Mom::func;
};
// ...
Child c;
c.foo(1, 2.3);
由于using
声明,两个func
成员都被带到Child
命名空间,并且查找不再含糊不清。