ブースト 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で宣言されているようです。誰も理由を知っていますか?ここに回避策はありますか?