考慮下面的代碼:繼承和顯式構造函數?
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
};
有沒有辦法來重新設計該代碼的方式使得Derived
將有Base
用相同的顯式/隱性質的所有構造函數?
繼承構造函數做到這一點。這只是遺憾的是,他們還沒有上,我知道:(我敢肯定,你可以自己動手完成這個任何編譯器實現(性狀檢測隱含/明確地可構造可以很容易地編寫和明智地使用SFINAE可以做剩下的),但我沒有時間到後一個完整的答案,現在,將這樣做,如果沒有一個當我得到的時間晚。 – 2012-08-16 16:12:20
要知道,你的'Derived'無法初始化列表應對。與他們工作的唯一的解決辦法是繼承構建函數。 – 2012-08-16 18:28:43