对于奇怪的话题感到抱歉,但不知道如何完全合成我的问题。这是问题所在:
我有一组包含类型的std :: vector的类。对于模板化来说,它是一个很好的候选者:
template <typename T>
class Container
{
T createObject() { T* obj=new T; _objects.push_back(obj); }
std::vector<T> _objects;
}
当我需要将这些容器存储在异质地图中时,问题就来了。它们是模板,因此在初始化之前它们不存在。我已经考虑过从一个虚拟IContainer派生Container来获得一个很好的起点,但是你看到createObject需要被模板化,所以我可以将IContainers添加到hetrogenous map中,但我将无法调用createObject()并且不想做一个static_cast。有人可以为此提出解决方案吗?
提前致谢, 阿马拉尔。
答案 0 :(得分:0)
听起来你可能会追问boost::any
之类的东西。见http://www.boost.org/doc/libs/1_49_0/doc/html/any/s02.html
总结:
class Container
{
std::vector<boost::any> _objects;
public:
template <class T>
void Add(const T& t) { _objects.push_back(t); }
}
在您的情况下,您不再需要为类添加模板,只需添加函数。
请注意,使用向量中的对象变得很困难,因为您不知道它们是什么类型 - 只要您想要使用它们,就必须进行测试以查看它是什么类型。
你需要更好地解释你想要做什么 - 但我猜你会不想要实际使用boost::any
。