C++ 来自模板类的多重继承

C++ 来自模板类的多重继承,c++,c++11,c++14,template-meta-programming,C++,C++11,C++14,Template Meta Programming,我希望有一个可以存储各种对象的通用存储类,我不希望使用存储所有对象的异构容器类。我考虑创建一个模板化存储类,并创建一个通用存储类,该类继承了不同类型的元类: template<typename Type> struct SingleInterface { public: SingleInterface() = default; virtual ~SingleInterface() = default; SingleInterface(const SingleI

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

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
    }

};
“get”是不明确的


使用派生类中的语句,使用
公开这两个重载:

class MutliInterface: public SingleInterface<double>, SingleInterface<int>
{
public:
    MutliInterface() = default;
    virtual ~MutliInterface() = default;
    using SingleInterface<double>::get;
    using SingleInterface<int>::get;
};
类多接口:公共单接口,单接口
{
公众:
MutliInterface()=默认值;
virtual~MutliInterface()=默认值;
使用SingleInterface::get;
使用SingleInterface::get;
};
这是不明确的,因为[class.member.lookup]基本上是说,当在类
MutliInterface
中找不到函数名时,将使用类的基类创建一组候选函数。但是,这些函数必须相同,否则就不明确(这里它们不相同)


当我们在这里使用
using
关键字时,我们会将所有这些都设置为快捷方式,并且两个重载都可以从派生类中立即访问。

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

class MutliInterface: public SingleInterface<double>, SingleInterface<int>
{
public:
    MutliInterface() = default;
    virtual ~MutliInterface() = default;
    using SingleInterface<double>::get;
    using SingleInterface<int>::get;
};
类多接口:公共单接口,单接口
{
公众:
MutliInterface()=默认值;
virtual~MutliInterface()=默认值;
使用SingleInterface::get;
使用SingleInterface::get;
};
这是不明确的,因为[class.member.lookup]基本上是说,当在类
MutliInterface
中找不到函数名时,将使用类的基类创建一组候选函数。但是,这些函数必须相同,否则就不明确(这里它们不相同)


当我们在这里使用
using
关键字时,我们将所有这些都设置为快捷方式,并且两个重载都可以从派生类立即访问。

键入get方法是否解决了歧义???void get(const std::string&keyword,Type*ptr)键入get方法不能解决歧义吗???void get(const std::字符串和关键字,类型*ptr)
class MutliInterface: public SingleInterface<double>, SingleInterface<int>
{
public:
    MutliInterface() = default;
    virtual ~MutliInterface() = default;
    using SingleInterface<double>::get;
    using SingleInterface<int>::get;
};