C++多重继承——带模板的菱形

标签 c++ templates inheritance virtual

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

我的 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/

相关文章:

连接到 MySQL 数据库的 Python 脚本 - 代码作为程序脚本运行,在 OOP 重构后失败

c++ - DFS 访问者不会遍历分离的顶点

c++ - 将 EXE 数据传递给一个或多个 DLL

c++ - 单例或将指针传递给管理器中的静态引用

html - perl 子程序输出附加 "1"

javascript - javascript 中的模板文字

c++ - c++中的多个return语句

c++ - 检查类是否是模板特化?

python - 装饰父类方法

c++ - 自包含从 std::enable_shared_from_this 继承的自身的 shared_ptr