使用C基类构造函数?

在使用模板时,我遇到了一个需要使一个基类构造函数可以从继承类中进行对象创建,以减少复制/粘贴操作。
我想通过使用关键字以相同的方式与函数case,这不工作。

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)'
}

所以我的问题:有没有任何方法来导入一个基类构造函数后继承类中的新的类被声明?

或者只有一个替代方法来声明新的构造函数并从初始化器列表中调用基本的构造函数?

首选初始化:

class C : public A
{
public:
    C(const string &val) : A(anInt) {}
};

在C 11中,可以使用继承构造函数(其具有在示例D中看到的语法)。

更新:继承构造函数在GCC自4.8版本开始提供。

如果你没有发现初始化的吸引力(例如,由于在你的实际情况下的可能性的数量),那么你可能赞成这种方法对于一些TMP结构:

class A
{
public: 
    A() {}
    virtual ~A() {}
    void init(int) { std::cout << "A\n"; }
};

class B : public A
{
public:
    B() : A() {}
    void init(int) { std::cout << "B\n"; }
};

class C : public A
{
public:
    C() : A() {}
    void init(int) { std::cout << "C\n"; }
};

class D : public A
{
public:
    D() : A() {}
    using A::init;
    void init(const std::string& s) { std::cout << "D -> " << s << "\n"; }
};

int main()
{
    B b; b.init(10);
    C c; c.init(10);
    D d; d.init(10); d.init("a");

    return 0;
}
http://stackoverflow.com/questions/8093882/using-c-base-class-constructors

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:使用C基类构造函数?