在c ++ 11中,可以继承构造函数。我有以下代码(复制示例),无法编译:
template<class T> class A
{
...
}
template<class T> class B : public A<T>
{
public:
B(int a, int b = 0);
}
template<class T> B::B(int a, int b /* =0 */)
{
...
}
class C : public B<int>
{
public:
using B::B;
}
以下代码不会运行C
没有构造函数的错误,即来自B
的错误不会被继承:
C obj(5);
//or
C obj(5, 3);
答案 0 :(得分:4)
Visual Studio 2013 不支持继承构造函数。有关详细信息,请参阅Support For C++11 Features。这是相关部分:
C ++ 11核心语言功能
- 继承构造函数
- Visual Studio 2010:否
- Visual Studio 2012:否
- Visual Studio 2013:否
<强>更新强>
看起来对继承构造函数的支持是added in the November 2013 CTP(帽子提示:@yngum)
答案 1 :(得分:2)
原始代码的问题是B::B
是私有的,因此请public
。
template<class T>
class B : public A<T>
{
public: // THIS
B(int a, int b = 0);
}
答案 2 :(得分:0)
您不能继承构造函数,但可以在派生类的初始化列表中显式调用它。
class C: public B<int>
{
C(int a, int b=0) : B(a, b)
{
}
};