我有一个设计问题。我有一个类G继承自使用模板类Base和类Z:
生成的类Baseclass G : public Base<Z>
现在我想创建一个与G相同但又拥有更多方法的新类G2。这些方法依赖于继承自Z的Z2类的属性和方法。基本上,我想为G2和Z2添加一些方法,但不是G或Z。
现在我对如何解决这个问题的唯一想法就是模拟G类。我觉得,因为Z2继承自Z,所以应该有更聪明的方法来实现它。
有没有办法在没有模板化G的情况下实现这个,或者复制粘贴代码?
答案 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