c++11 - std::bind 调用 std::make_shared

标签 c++11 bind make-shared

我正在尝试创建一个通过在 std::make_shared 上调用 std::bind 来返回共享指针的仿函数,但语法超出了我的范围,或者也许根本不可能?类似于下面的内容,假设 MyBar 的构造函数采用对 MyFoo 的 const 引用:

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

最佳答案

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

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

关于c++11 - std::bind 调用 std::make_shared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5238106/

相关文章:

c++ - 返回make_shared <Base>,继承和强制转换为Derived无法按预期工作吗?

c++ - 如何在结构上使用 std::unique_ptr?

c++ - 如何在数组 <bool> 上使用位操作

javascript - 如何更改 `this` 调用 Vue 实例方法的上下文?

linux - 与 INADDR_ANY 绑定(bind)

c++ - 将复制构造函数与 std::make_shared 结合使用

c++ - boost::make_shared 底层对象和引用计数对象的内存分配大小在哪里?

c++ - 转义 lambda 的示例代码

c++ - std::async:即使任务完成,创建的线程仍然存在?

Javascript绑定(bind)函数实现