如何避免样板代码构造函数?

Jan*_*roň 6 c++ oop inheritance

我们有这样的课:

struct Base {
  Base() { ... }
  Base(int) { ... }
  Base(int,string) { ... }
  ...
};
Run Code Online (Sandbox Code Playgroud)

我想继承许多课程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) { }
};
Run Code Online (Sandbox Code Playgroud)

而且我不需要向child的构造函数添加任何代码.是否可以隐式继承它们?要以同样的方式调用它们Base,只需更改名称?预处理器可以在这里滥用,但还有其他解决方法吗?

Gor*_*pik 7

在符合C++ 11的编译器(标准中的第12.9节)中,您可以非常轻松地执行此操作:

struct Son : public Base {
  using Base::Base;
};
Run Code Online (Sandbox Code Playgroud)

这将继承所有构造函数,Base并且等同于您的类代码Son.

不幸的是,看起来最流行的编译器(如GCC或VC++)还不支持此功能,所以暂时还不行.但是在编译器中尝试这个代码,看看会发生什么.