さまざまな種類のポインターを格納するために 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));
}
これはビルドされますが、キャストに失敗します。なぜですか?