我使用ptr_map来存储不同类型的指针。投射指针
boost::ptr_map<string, any> someMap;
我存储在那里的一些模板类对象:
someMap.insert("1", new SomeClass<int>());
someMap.insert("2", new SomeClass<float>());
现在我想从地图中获取值。下面是引用一个例子:
template<typename T>
T &get(const string &someKey)
{
try
{
return any_cast<EventType&>(mSignalAssociation.at(signalName));
} catch(bad_any_cast &e)
{
// Logging here
}
}
get< SomeClass<int> >("1"); // This works
但我并不喜欢引用,因为我无法回报,例如,NULL,如果铸造不良或对象不存在。
如何从这张地图得到指针?
T *get(const string &someKey)
{
return any_cast<EventType*>(mSignalAssociation.at(signalName));
}
这样构建但在铸造时失败,为什么?
你为什么使用'ptr_map'? 'any'具有值语义,所以它可以存储在一个普通的'map'中。 – 2010-06-28 12:57:16
这正是我想到的。'ptr_map'存储一个指向其参数的指针,所以我们有一个指向小结构的指针,它本身就是指向真实对象的指针。谈论过早的悲观化。 – 2010-06-28 13:02:58