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

How to avoid boilerplate code constructors?

本文关键字:代码 构造函数 何避免      更新时间:2023-10-16

让我们有这样的类:

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) { }
};

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

在符合 C++11 的编译器(标准中的 §12.9)中,您实际上可以很容易地做到这一点:

struct Son : public Base {
  using Base::Base;
};

这继承了 Base 的所有构造函数,等效于类 Son 的代码。