c – 使用模板化继承调用Grandparent构造函数
发布时间:2020-12-16 07:32:22 所属栏目:百科 来源:网络整理
导读:我选择使用模板化继承来避免多重和虚拟继承.我的目标是让不同的孩子(4或5代或我无法控制的继承)有一个共同的函数调用,无论他们得到什么. 我的解决方案是插入模板继承,如下所示: template typename BASEclass common_call : public BASE {public: void foo()
我选择使用模板化继承来避免多重和虚拟继承.我的目标是让不同的孩子(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*/} }; 我试图尽可能避免为每种类型的基础制作部分模板专业化. 解决方法
如果你使用如下的可变参数模板给common_call一个模板化的构造函数:
template <typename BASE> class common_call : public BASE { public: // C++11 variadic templates to define whole range of constructors template<typename... Args> common_call(Args&&... args) : BASE(std::forward<Args>(args)...) {} void foo() { /*implementation independent of base*/ } }; 然后,您可以使用任何模板参数(例如base3)从common_call派生,并调用该类已定义的任何构造函数 class child3 : public common_call<base3> { public: child3(Type1 param1,Type2 param2) : common_call(param2),// call constructor overload with 1 parameter of Type2 t1_(param1) // initialize t1_ member {} private: Type1 t1_; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读