从模板类多重继承

时间:2017-08-10 18:11:10

标签: c++ c++11 c++14 template-meta-programming

我希望有一个可以存储各种对象的通用存储类,我不想使用存储所有对象的异构容器类。我想过创建一个模板化的存储类,并创建一个继承自这个具有不同类型的元类的通用存储类:

template<typename Type>
struct SingleInterface
{
public:
    SingleInterface() = default;
    virtual ~SingleInterface() = default;
    SingleInterface(const SingleInterface &) = default;
    SingleInterface & operator=(const SingleInterface &) = default;
    SingleInterface(SingleInterface &&) = default;
    SingleInterface & operator=(SingleInterface &&) = default;

    void get(const std::string & keyword, Type * ptr)
    {
        // implementation
    }

};

我的普通课程如下:

class MutliInterface: public SingleInterface<double>, SingleInterface<int>
{
public:
    MutliInterface() = default;
    virtual ~MutliInterface() = default;
};

当我创建一个MutliInterface类时,我收到以下错误:

MutliInterface interface;
double *v;
interface.get("test", v);
  

&#39;获得&#39;是不明确的&#39;

1 个答案:

答案 0 :(得分:4)

在派生类中使用using语句公开两个重载:

class MutliInterface: public SingleInterface<double>, SingleInterface<int>
{
public:
    MutliInterface() = default;
    virtual ~MutliInterface() = default;
    using SingleInterface<double>::get;
    using SingleInterface<int>::get;
};
由于[class.member.lookup]基本上说当函数get的名称没有立即在类MutliInterface中找到时,它是不明确的,候选函数集是使用类&#39;创建的。基类。但是,这些功能必须相同,否则它们是不明确的(这里它们不相同)。

当我们在这里使用using关键字时,我们会快速执行所有操作,并且可以从派生类中立即访问这两个重载。