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);
Другие вопросы по тегам