У меня есть фабричный шаблон с использованием новых возможностей C++ 11. Для этого в реестре зарегистрирована функция std ::. Теперь я пытаюсь реализовать экземплярную часть. Сейчас это реализовано так:вызов std: make_shared через std :: function
std::map<uint32_t, std::function<Class*()>>::iterator it = m_creators.find(id);
if(it != m_creators.end())
{
return std::shared_ptr<Class>((it->second)());
}
Проблема заключается в том, что это, очевидно, не спасает исключения, и я пытаюсь заменить станд :: shared_ptr вызов с эквивалентным стандом :: make_shared вызова. Std :: function - это функция create, которая вызывает только конструктор подкласса Object. Проблема в том, что я понятия не имею, как использовать std :: function вместо вызова конструктора в std :: make shared. Возможно ли это?
* Почему вы хотите использовать 'make_shared', когда ваше решение должно работать нормально? Если вы видите, например. [эта ссылка] (http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared) 'std :: make_shared' больше не является исключением. –
Почему это не безопасно? –
@JoachimPileborg, чтобы быть справедливым "* why *", именно поэтому он задает вопрос и, возможно, может сделать с вашим опытом :) –