3

我正在尝试通过在 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);
4

1 回答 1

7

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

std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = 
    std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);
于 2011-03-08T21:14:47.760 回答