我知道 boost asio 可以与第三方库以反应器样式集成。这是我找到的示例。它是用一个插座演示的,它工作得很好。但是当我使用 boost::windows::stream_handle 而不是 socket 来处理文件描述符时,它不会编译。这是示例代码:
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声明。有谁知道为什么?这里有解决方法吗?