【发布时间】:2014-07-17 09:23:19
【问题描述】:
我正在尝试使用 std::map 和存储类型的 Type 类在 C++ 中创建类型映射。然后有一个基类 Base 和一些我想要存储的派生类。
template <typename T>
class Type {
public:
Type() {}
virtual ~Type() {}
virtual T* allocate() const { return new T; }
virtual T* cast(void *object) const { return static_cast<T*>(object); }
};
这很好用:
map<int, Base*> typeMap;
typeMap[1] = new Derive();
但是当试图做这样的事情时,我得到了错误:“Type
map<int, Type<Base>*> typeMap;
typeMap[1] = new Type<Derive>();
有没有机会存储这样的东西?我不想要任何库解决方案(非开源)
【问题讨论】:
-
您知道您将
int映射到Type<Base>*类型的对象,而不是将int映射到实际类型。 -
整个事情需要是运行时构造还是编译时间可以?
-
编译时间没问题@pmr
-
Type<Base*>和Type<Derived*>不可兑换。 -
@Gelidus
I don't want any library solutions好吧,你可以得到一个库,看看他们是如何实现你所要求的。想法没有版权,至少理论上没有。
标签: c++ oop templates inheritance map