【发布时间】:2011-01-21 15:24:09
【问题描述】:
这种情况可能吗?
class Base
{
int someBaseMemer;
};
template<class T>
class Derived : public T
{
int someNonBaseMemer;
Derived(T* baseInstance);
};
目标:
Base* pBase = new Base();
pBase->someBaseMemer = 123; // Some value set
Derived<Base>* pDerived = new Derived<Base>(pBase);
pDerived->someBaseMemer 的值应该等于 pBase->someBaseMember 并且与其他基本成员相似。
【问题讨论】:
-
你为什么要这么扭曲的东西?
-
堆栈溢出异常?大声笑……严肃地说……这不会编译。
-
@Elite:实际上,如果您将成员更改为公开,它会。但这并没有让它变得不那么可怕。
-
在我看来,您可以使用它来创建具有您个人想要的功能的对象的合并,同时保留它们自己的功能。想象一下,有一个集合,无论如何,它都能够调用 read() 和 write(),并且正在写入或读取的内容也取决于设备类型(串行端口?文件?内存文件描述符?)。不过,这似乎是一个糟糕的设计。
-
这似乎是 CRTP 的简单应用,加上从基类实例复制,并将基对象(要复制的)作为引用而不是指针传递给派生 ctor 在C++。 en.wikipedia.org/wiki/Curiously_recurring_template_pattern
标签: c++ visual-c++ inheritance templates