从模板的多个实例继承时遇到问题。
我的 Bridge 类试图继承 BridgeTemplate 的 2 个实例,因此当我们尝试调用 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>
{
...
}
最佳答案
参数类型无关紧要。
错误消息适用于名称查找,不适用于重载解析。所有重载函数必须来自同一个类或命名空间。为了确保这一点,请使用此模式:
class Child : public Dad, public Mom {
using Dad::func;
using Mom::func;
};
// ...
Child c;
c.foo(1, 2.3);
由于 using
声明,两个 func
成员都被带到了 Child
命名空间,并且查找不再有歧义。
关于C++多重继承——带模板的菱形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220326/