让我们有这样的课:
struct Base {
Base() { ... }
Base(int) { ... }
Base(int,string) { ... }
...
};
我想从Base
继承许多类,所以我写了
struct Son : public Base {
Son() : Base() { }
Son(int) : Base(int) { }
Son(int,string) : Base(int,string) { }
};
struct Daughter : public Base {
Daughter() : Base() { }
Daughter(int) : Base(int) { }
Daughter(int,string) : Base(int,string) { }
};
我不需要向child的构造函数添加任何代码。是否可以隐式继承它们?要像Base
一样调用它们,只需更改名称即可?这里可以滥用预处理器,但还有其他解决方法吗?
答案 0 :(得分:7)
在符合C ++ 11标准的编译器(标准中的第12.9节)中,您可以非常轻松地执行此操作:
struct Son : public Base {
using Base::Base;
};
这将继承Base
中的所有构造函数,并且等同于类Son
的代码。
不幸的是,看起来最流行的编译器(如GCC或VC ++)还不支持此功能,所以暂时还不行。但是在编译器中尝试这个代码,看看会发生什么。