继承和显式构造函数?

Vin*_*ent 4 c++ constructor explicit-constructor c++11

请考虑以下代码:

template<typename T> class Base
{
    Base();
    Base(const Base<T>& rhs);
    template<typename T0> explicit Base(const Base<T0>&  rhs);
    template<typename T0, class = typename std::enable_if<std::is_fundamental<T0>::value>::type> Base(const T0& rhs);
    explicit Base(const std::string& rhs);
};

template<typename T> class Derived : Base<T>
{
    Derived();
    Derived(const Derived<T>& rhs);
    template<class T0> Derived(const T0& rhs) : Base(rhs); 
    // Is there a way to "inherit" the explicit property ?
    // Derived(double) will call an implicit constructor of Base
    // Derived(std::string) will call an explicit constructor of Base
};
Run Code Online (Sandbox Code Playgroud)

有没有办法以这样的方式重新设计此代码,Derived使所有构造函数Base具有相同的显式/隐式属性?

Nic*_*las 6

C++ 11 将此作为一项功能提供.然而,即使GCC实际上还没有实现它.

实际实现时,它看起来像这样:

template<typename T> class Derived : Base<T>
{
    using Base<T>::Base;
};
Run Code Online (Sandbox Code Playgroud)

话虽如此,它可能对你的情况没有帮助.继承的构造函数是一个全有或全无的命题.您可以使用它们的参数获得所有基类构造函数.另外,如果您定义的构造函数与继承的构造函数具有相同的签名,则会出现编译错误.