Ł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)
是否有可能实现上述示例所描述的行为?
目前在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;").