Я использую 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));
}
Это строит, но не на касте, почему?