std :: bind вызов std :: make_shared - PullRequest
3 голосов
/ 08 марта 2011

Я пытаюсь создать функтор, который возвращает 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 Ответ

7 голосов
/ 09 марта 2011

Ты почти у цели; вам просто нужно указать дополнительные аргументы для make_shared, чтобы указать тип параметра, который он принимает. Обычно они выводятся, но если вы не укажете их в выражении связывания, он попытается создать объект MyBar по умолчанию.

std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = 
    std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);
...