std :: bind对std :: make_shared的调用

时间:2011-03-08 20:43:55

标签: c++11 bind make-shared

我试图通过在std :: make_shared上调用std :: bind来创建一个返回shared_ptr的仿函数,但是语法超出了我,或者甚至不可能?假设MyBar的构造函数对MyFoo采用const引用:

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

1 个答案:

答案 0 :(得分:7)

你快到了;您只需要指定make_shared的附加参数来指示它接受的参数类型。这些通常是推导出来的,但是如果你没有在绑定表达式中指定它们,那么它会尝试默认构造MyBar对象。

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