将unique_ptr引用传递给boost :: bind吗?

安德烈亚斯(Andreas Yankopolus)

我使用的是CentOS 6.6(gcc 4.4.7),并使用Boost.Asio(1.41)进行开发。我希望io_servicerun()m启动时在管理对象中调用成员函数我尝试编译的代码如下所示:

#include <memory>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

boost::asio::io_service io;
std::unique_ptr<manager> m;
m = std::make_unique<manager>;
io.post(boost::bind(&manager::run, &m));

gcc符合该boost::bind声明,其中包括:

/usr/include/boost/bind/mem_fn_template.hpp:40: error: pointer to
member type ‘void (manager::)()’ incompatible with object type
‘std::unique_ptr<manager, std::default_delete<manager> >’

我想在这里做什么?

管理器对象将只知道计时器。知道io_service的单独对象将在以后添加到其构造函数中。但是这个想法是,manager::run()它将创建一组初始计时器来引导系统。

澄清:

我的想法是,外部代码块管理的生命周期,m下一条语句将是io.run()返回m,外部代码将销毁io.run()因此,将原始参考传递mio是合适的。但是我是一名现代C ++新手,因此可能会偏离基础。

大卫·施瓦兹

您需要C ++-14和广义lambda捕获才能完成这项工作-您需要将唯一指针移到lambda中。相反,只使用一个shared_ptr,它std::bind理解本身:

std::shared_ptr<manager> m;
m = std::make_shared<manager>();
io.post(std::bind(&manager::run, std::move(m)));

std::move是可选的,但保证m不保存,当它不希望周围的经理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不被引用时,unique_ptr会自动销毁吗?

来自分类常见问题

如何将std :: unique_ptr传递给函数

来自分类Dev

将unique_ptr容器传递给构造函数?

来自分类Dev

将unique_ptr传递给函数对象

来自分类Dev

转换unique_ptr的类型安全吗?

来自分类Dev

将unique_ptr转换为void *并返回,我需要释放吗?

来自分类Dev

我必须使用boost :: bind创建多态的“转换”功能吗?

来自分类Dev

将unique_ptr传递给将其添加到向量的函数

来自分类Dev

Visual Studio 2013 C ++-将std :: unique_ptr传递给绑定函数

来自分类Dev

将unique_ptr的向量传递给对象。向量成为成员变量。正确的方法?

来自分类Dev

是否可以将这个Lambda传递给`unique_ptr`终生可用?

来自分类Dev

将 unique_ptr 传递给对象会引发错误

来自分类Dev

如何将 unique_ptr 对象作为参数传递给作为库的类

来自分类Dev

将boost :: bind成员函数传递给wt监听器..我做错了什么?

来自分类Dev

将boost :: bind成员函数传递给wt监听器..我做错了什么?

来自分类Dev

传递给bind的struct sockaddr可以是局部变量吗?

来自分类Dev

tr1 :: bind并通过引用传递,这种行为真的可以预期吗?

来自分类Dev

tr1 :: bind并通过引用传递,这种行为真的可以预期吗?

来自分类Dev

get()不会破坏std :: unique_ptr背后的想法吗?

来自分类Dev

C ++ std :: unique_ptr但不可移动吗?

来自分类Dev

我可以扔一个unique_ptr吗?

来自分类Dev

std :: unique_ptr是RAII的应用程序吗?

来自分类Dev

这是使用unique_ptr的正确方法吗?

来自分类Dev

unique_ptr <>()初始化会失败吗?

来自分类Dev

将值传递给.bind()方法

来自分类Dev

如何通过多态引用传递unique_ptr?

来自分类Dev

我可以将默认值传递给std :: string的引用吗?

来自分类Dev

可以将BiFunction引用传递给需要功能接口的方法吗?

来自分类Dev

将引用传递给线程时,真的需要std :: ref吗?

Related 相关文章

  1. 1

    不被引用时,unique_ptr会自动销毁吗?

  2. 2

    如何将std :: unique_ptr传递给函数

  3. 3

    将unique_ptr容器传递给构造函数?

  4. 4

    将unique_ptr传递给函数对象

  5. 5

    转换unique_ptr的类型安全吗?

  6. 6

    将unique_ptr转换为void *并返回,我需要释放吗?

  7. 7

    我必须使用boost :: bind创建多态的“转换”功能吗?

  8. 8

    将unique_ptr传递给将其添加到向量的函数

  9. 9

    Visual Studio 2013 C ++-将std :: unique_ptr传递给绑定函数

  10. 10

    将unique_ptr的向量传递给对象。向量成为成员变量。正确的方法?

  11. 11

    是否可以将这个Lambda传递给`unique_ptr`终生可用?

  12. 12

    将 unique_ptr 传递给对象会引发错误

  13. 13

    如何将 unique_ptr 对象作为参数传递给作为库的类

  14. 14

    将boost :: bind成员函数传递给wt监听器..我做错了什么?

  15. 15

    将boost :: bind成员函数传递给wt监听器..我做错了什么?

  16. 16

    传递给bind的struct sockaddr可以是局部变量吗?

  17. 17

    tr1 :: bind并通过引用传递,这种行为真的可以预期吗?

  18. 18

    tr1 :: bind并通过引用传递,这种行为真的可以预期吗?

  19. 19

    get()不会破坏std :: unique_ptr背后的想法吗?

  20. 20

    C ++ std :: unique_ptr但不可移动吗?

  21. 21

    我可以扔一个unique_ptr吗?

  22. 22

    std :: unique_ptr是RAII的应用程序吗?

  23. 23

    这是使用unique_ptr的正确方法吗?

  24. 24

    unique_ptr <>()初始化会失败吗?

  25. 25

    将值传递给.bind()方法

  26. 26

    如何通过多态引用传递unique_ptr?

  27. 27

    我可以将默认值传递给std :: string的引用吗?

  28. 28

    可以将BiFunction引用传递给需要功能接口的方法吗?

  29. 29

    将引用传递给线程时,真的需要std :: ref吗?

热门标签

归档