C ++:使用基类

时间:2017-08-11 19:07:36

标签: c++ templates template-specialization derived-class

想象一下,我有两个相似的结构A和B.A和B都有一个指向A的指针,但A有一个指向A或B的附加指针。

我用Base和Derived类想到了类似的东西

template <bool T> struct Derived;
struct Base { Derived<0> *p1; };
template <> struct Derived<0> : public Base { Base *p2; };
template <> struct Derived<1> : public Base {};

其中A为Derived<0>,B为Derived <1>

这里的问题是,当通过p2访问一个类时,编译器不知道它是哪个Derived类,而这样的东西会产生错误。

Derived<0> x, y, z;
x.p2 = &y;
y.p2 = &z;
x.p2->p2; // Error

你们中的任何人都知道任何神奇的解决方法,最好只使用编译时功能吗?

我还需要知道我使用哪种类型的Derived,以便我知道是否可以使用p2。

如果有帮助,您可以将事物视为双链表,其中Derived<0>是正常节点,Derived<1>是结束节点,p1 prev 指针和p2 next 指针。

编辑:它不需要使用Base-and-Derived-class-type结构,它可以是任何东西。

0 个答案:

没有答案