在這部分代碼從example:爲什麼'boost :: bind()`不能用`std :: bind()`替換?
int main()
{
boost::asio::io_service io;
printer p(io);
boost::thread t(boost::bind(&boost::asio::io_service::run, &io));
io.run();
t.join();
return 0;
}
如果我更換boost::bind(&boost::asio::io_service::run, &io)
到std::bind(&boost::asio::io_service::run, &io)
我得到的編譯錯誤:
.../usr/lib/c++/v1/functional:1843:1: note: candidate template
ignored: couldn't infer template argument '_Fp'
bind(_Fp&& __f, _BoundArgs&&... __bound_args)
^
/usr/lib/c++/v1/functional:1852:1: note: candidate template
ignored: couldn't infer template argument '_Rp'
bind(_Fp&& __f, _BoundArgs&&... __bound_args)
^
1 error generated.
爲什麼這個錯誤發生?
爲什麼std::bind(&printer::print1, &p)
有效,但std::bind(&boost::asio::io_service::run, &io)
不起作用?
添加錯誤信息的所有行。 –
'boost :: thread'有一個轉發構造函數,所以你根本不需要綁定:'boost :: thread t(&boost :: asio :: io_service :: run,&io);' –