如何从类继承而不是继承自模板类生成的类并更改模板类

时间:2017-08-04 10:57:14

标签: c++ templates inheritance

我有一个设计问题。我有一个类G继承自使用模板类Base和类Z:

生成的类Base
class G : public Base<Z>

现在我想创建一个与G相同但又拥有更多方法的新类G2。这些方法依赖于继承自Z的Z2类的属性和方法。基本上,我想为G2和Z2添加一些方法,但不是G或Z。

现在我对如何解决这个问题的唯一想法就是模拟G类。我觉得,因为Z2继承自Z,所以应该有更聪明的方法来实现它。

有没有办法在没有模板化G的情况下实现这个,或者复制粘贴代码?

1 个答案:

答案 0 :(得分:0)

您可以尝试在G上进行G2的私有继承,并使用using公开G的所有功能。 Base<Z>的所有功能都将被隐藏,因为它是私有的。继承Base<Z2>并获得您想要的东西。唯一的问题是,您同时具有Base<Z>Base<Z2>,(示例中为int x)属性,因此对象更大,所以如果它是一个问题,您应该全部{{1}继承自Base<T>类并使用虚拟继承。 (第二节)

TrueBase

虚拟继承,最终G2中只有一个template<class T> class Base { int x; T* t; }; class Z { void zfoo() {} }; class G : public Base<Z> { public: void foo1() {} }; class Z2 : public Z { void zfoo2() {} }; class G2 : private G, public Base<Z2> { public: using G::foo1; void newfoo() {} };

int x