基于父类的构造函数(C++)自动创建构造函数

Łuk*_*Lew 3 c++ templates constructor

这是我想要开始工作的代码:

template <class A>
class B : public A {
public:
  // for a given constructor in A, create constructor with identical parameters,
  // call constructor of parent class and do some more stuff
  B(...) : A(...) {
    // do some more stuff
  }
};
Run Code Online (Sandbox Code Playgroud)

是否有可能实现上述示例所描述的行为?

Joh*_*itb 8

目前在C++中无法做到这一点.它被称为"完美转发",并且在C++ 0x中被允许.您可以通过生成构造函数的重载来模拟它,直到固定的最大值(例如,8个参数),对于const和非const引用都是如此.这仍然不完美(临时工具不会作为临时工具转发),但通常在实践中有效:

template<typename T1>
B(T1 &a1):A(a1) { 
  // do some more stuff
}

template<typename T1>
B(T1 const &a1):A(a1) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 &a1, T2 &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 const &a1, T2 const &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 const &a1, T2 &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 &a1, T2 const &a2):A(a1, a2) { 
  // do some more stuff
}

// ...
Run Code Online (Sandbox Code Playgroud)

可以使用Boost.Preprocessor或某些脚本自动生成代,但它并不是很好,因为重载量增长很快.

因此,在短期-没有自己写你的构造函数,直到的C++ 0x是可用的,它支持两种使用任何功能完善的转发和特殊的构造转发("using A::A;").