我使用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