0

ブースト asio は、リアクター スタイルでサードパーティのライブラリと統合できることを知っています。これが私が見つけた例ですソケットでデモンストレーションされており、完全に正常に動作します。しかし、ソケットの代わりにboost::windows::stream_handleを使用してファイル記述子を処理すると、コンパイルされません。コード例は次のとおりです。

void Func(boost::system::error_code ec, std::size_t bytes)
{

}
int main()
{
    boost::asio::io_service io_service;
    TCP::socket sock(io_service);
    sock.async_read_some(boost::asio::null_buffers(), Func); //1

    HANDLE h;
    char buf[20];
    boost::asio::windows::stream_handle Handle(io_service, h);
    Handle.async_read_some(boost::asio::buffer(buf, 20), Func);  //2
    //Handle.async_read_some(boost::asio::null_buffers(), Func); //3
    return 0;
}

1 行目と 2 行目はコンパイルできますが、3 行目のコメントを外すと、大量のエラーが発生します。エラーの一部を次に示します。

F:\Lib\boost\include\boost-1_54/boost/asio/detail/win_iocp_handle_service.hpp:265:8: エラー: 'void boost::asio::detail::win_iocp_handle_service::async_read_some(boost::asio: :detail::win_iocp_handle_service::implementation_type&, const boost::asio::null_buffers&, Handler&) [with Handler = void (*)(boost::system::error_code, unsigned int)]' は非公開

関数はprivateで宣言されているようです。誰も理由を知っていますか?ここに回避策はありますか?

4

0 に答える 0