我想爲async_write提供一個額外的boost :: function。我想要連接自己的HandleWrite函數先被調用,然後調用提供的boost :: function。結合連接的Boost ::綁定boost :: function參數的方法
會員方法ASIO ASYNC_WRITE
void Connection::HandleWrite( const boost::system::error_code& e, boost::function<void (const boost::system::error_code&)> handler) { // Code removed for clarity if(!handler.empty()) handler(e); };
試圖HandleWrite綁定到ASIO ASYNC_WRITE和提供另一綁定作爲用於處理的值。這不會編譯。我究竟做錯了什麼?
void Connection::QueueRequest( boost::shared_array<char> message, std::size_t size, boost::function<void (const boost::system::error_code&)> handler) { // Code hidden for clarity boost::asio::async_write(m_Socket, boost::asio::buffer(buffer), boost::bind(&Connection::HandleWrite, shared_from_this(), boost::asio::placeholders::error, handler ) ); }
的錯誤信息,我從編譯器得到的是以下幾點:
Error 1 error C2825: 'F': must be a class or namespace when followed by '::' boost\bind\bind.hpp 69 Error 2 error C2039: 'result_type' : is not a member of '`global namespace'' boost\bind\bind.hpp 69 Error 3 error C2146: syntax error : missing ';' before identifier 'type' boost\bind\bind.hpp 69 Error 4 error C2208: 'boost::_bi::type' : no members defined using this type boost\bind\bind.hpp 69 Error 5 fatal error C1903: unable to recover from previous error(s); stopping compilation boost\bind\bind.hpp 69
如果您提供了錯誤消息 – 2010-01-28 14:37:05
我會在上面沒有添加上面的錯誤消息。 – 2010-01-29 10:13:38
問題原來是在另一個地方使用相同的HandleWrite函數,並沒有正確綁定。修復後編譯。 – 2010-01-29 10:22:33