簡體   English   中英

將unique_ptr引用傳遞給boost :: bind?

[英]Passing a unique_ptr reference to boost::bind?

我使用的是CentOS 6.6(gcc 4.4.7)並使用Boost.Asio(1.41)進行開發。 我希望io_service在manger對象m啟動時調用成員函數run() 我正在嘗試編譯的代碼如下:

#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() io.run()返回時,外部代碼將銷毀m 因此,將m的原始引用傳遞給io是合適的。 但我是一個現代的C ++新手,可能會離開這里。

你需要C ++ - 14和廣義lambda捕獲才能使它工作 - 你需要將唯一指針移動到lambda中。 相反,只需使用一個shared_ptrstd::bind本身可以理解:

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

std::move是可選的,但確保m不會在不需要時保持經理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM