std::bind вызов std::make_shared
Я пытаюсь создать функтор, который возвращает shared_ptr, вызывая std:: bind для std:: make_shared, но синтаксис за мной, или, возможно, это даже невозможно? Примерно так: при условии, что конструктор MyBar принимает константную ссылку на MyFoo:
std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = std::bind(&std::make_shared<MyBar>, std::placeholders::_1);
1 ответ
Решение
Ты почти у цели; вам просто нужно указать дополнительные аргументы make_shared
чтобы указать тип параметра, который он принимает. Обычно они выводятся, но если вы не укажете их в выражении связывания, он попытается создать MyBar
объект.
std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor =
std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);