std::bind 调用 std::make_shared

发布于 2024-10-20 22:21:55 字数 302 浏览 7 评论 0原文

我正在尝试创建一个通过在 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);

I'm trying to create a functor that returns a shared_ptr by calling std::bind on std::make_shared, but the syntax is beyond me, or perhaps it's not even possible? Something like the following, assuming the constructor of MyBar takes a const reference to a MyFoo:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

二智少女猫性小仙女 2024-10-27 22:21:55

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

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

You're nearly there; you just need to specify the additional arguments to make_shared to indicate the type of parameter it accepts. These are normally deduced, but if you don't specify them in a bind expression then it tries to default-construct the MyBar object.

std::function<std::shared_ptr<MyBar>(const MyFoo &)> functor = 
    std::bind(&std::make_shared<MyBar,MyFoo const&>, std::placeholders::_1);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文