c++ - 使用 C++ 基类构造函数?

在使用模板时,我遇到了需要使基类构造函数可以从继承的类中访问以创建对象以减少复制/粘贴操作。 我正在考虑通过 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)'
}

所以我的问题是:有没有办法在继承类中的新构造函数被声明后导入基类构造函数?

或者只有一种选择来声明新的构造函数并从初始化列表中调用基础构造函数?

最佳答案

是的,从 C++11 开始:

struct B2 {
    B2(int = 13, int = 42);
};
struct D2 : B2 {
    using B2::B2;
// The set of inherited constructors is
// 1. B2(const B2&)
// 2. B2(B2&&)
// 3. B2(int = 13, int = 42)
// 4. B2(int = 13)
// 5. B2()

// D2 has the following constructors:
// 1. D2()
// 2. D2(const D2&)
// 3. D2(D2&&)
// 4. D2(int, int) <- inherited
// 5. D2(int) <- inherited
};

更多信息见http://en.cppreference.com/w/cpp/language/using_declaration

https://stackoverflow.com/questions/8093882/

相关文章:

c++ - 在 std::map 中更改元素键的最快方法是什么

c++ - 为什么优化会杀死这个功能?

c++ - 为什么 C/C+ +'s "#pragma once"不是 ISO 标准?

c++ - std::tuple get() 成员函数

c++ - 内存分配是系统调用吗?

c++ - queue::push 后双重释放或损坏

c++ - 是否有可以解析 C++ 的优秀 Python 库?

>' should be ` > >' within ">c++ - 模板内的模板 : why "` >>' should be ` > >' within

c++ - 如何在 GCC 搜索路径中包含头文件?

c++ - 使用 Qt 进行序列化