在使用模板时,我遇到了需要使继承类可访问基类构造函数以创建对象以减少复制/粘贴操作。我正在考虑通过 using
关键字以与函数大小写相同的方式执行此操作,但这不起作用。
class A
{
public:
A(int val) {}
};
class B : public A
{
};
class C : public A
{
public:
C(const string &val) {}
};
class D : public A
{
public:
D(const string &val) {}
using A::A; // g++ error: A::A names constructor
};
void main()
{
B b(10); // Ok. (A::A constructor is not overlapped)
C c(10); // error: no matching function to call to 'C::C(int)'
}
所以我的问题:有没有办法在继承类中的新构造函数被声明后导入基类构造函数?
或者只有一种选择来声明新的构造函数并从初始化列表中调用基本构造函数?
原文由 minyor 发布,翻译遵循 CC BY-SA 4.0 许可协议
首选初始化:
在 C++11 中,您可以使用继承构造函数(其语法见于您的示例
D
)。更新: 自 4.8 版以来,GCC 中提供了继承构造函数。
如果您没有发现初始化吸引人(例如,由于您的实际情况中的可能性数量),那么您可能会喜欢这种方法用于某些 TMP 构造: