在使用模板时,我遇到了一个需要让继承类可以访问基类构造函数来创建对象,以减少复制和粘贴操作的需求。我曾考虑通过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)'
}
我的问题是:是否有一种方法可以在已声明继承类的新构造函数之后导入基类构造函数?
还是唯一的选择是声明新的构造函数并从初始化列表中调用基类构造函数?