現在,G ++和VC++ 2010都不支持繼承構造函數。爲什麼繼承構造函數不被所有現有的C++編譯器支持?
不過,我認爲這是C++ 0x中最漂亮的功能之一。我認爲編譯器應該很容易實現。
爲什麼編譯器對此功能不感興趣?
假設我想通過繼承的std :: string這樣的設計我自己的字符串類:
class MyString : public std::string
{
public:
// I have to redefine many overloaded ctors here and forward their arguments to
// std::string's ctors. How tedious it will be!!!
};
一個美麗的代碼示例:
struct B1
{
B1(char);
};
struct B2
{
B2(double);
B2(int);
};
struct D1 : B1, B2
{
using B1::B1; // D1(char)
using B2::B2; // D1(double), D1(int)
};
D1 d('c'); //OK, invokes D1(char)
「漂亮的代碼示例」的問題:D1的B2部分如何初始化? – UncleBens 2010-12-11 17:17:13
@UncleBens,我認爲它應該被默認初始化或者沒有初始化。 – xmllmx 2010-12-11 17:19:23
'std :: string'並不意味着從(或任何其他STL容器)派生而來。 – fredoverflow 2010-12-11 17:19:44