我选择使用模板继承以避免多重继承和虚拟继承。我的目标是让各种孩子(4 或 5 代或我无法控制的继承)拥有一个共同的函数调用,无论它们派生什么。
我的解决方案是这样插入模板继承:
template <typename BASE>
class common_call : public BASE {
public:
void foo() { /*implementation independent of base*/ }
};
class child1 : public common_call <base1> {};
class child2 : public common_call <base2> {};
这有调用base的构造函数的问题。类 base1 和 base2(不是我写的)有不同的构造函数,我必须在初始化列表中调用它们。common_call 模板对这些构造函数一无所知,但子类按照它们当前直接继承的方式进行操作。
我有什么办法可以做到这一点:
class child3 : public common_call<base3>{
public:
child3(param1, param2) : base3(param2) {/*do things here*/}
};
如果可能,我会尽量避免为每种类型的基础进行部分模板特化。