从 boost::asio 开始:使用 io_context 时遇到问题
Beginning on boost::asio : Having problems using io_context
我一直在用 c++ 编写代码,想尝试使用 boost asio 来创建 TCP 异步服务器。
我阅读了 boost 提供的文档,并使用 boost 1.75 尝试编写此服务器的代码。
但是,我似乎不明白如何使用文档中的io_context。
当我编译第 3 天的代码时:异步 TCP 日间服务器(this link 在 boost 1.78 中,但似乎与 1.75 没有太大区别)我不断收到错误 io_context 无法复制,因为它们继承自 execution_context,而 execution_context 继承自 noncopyable
。
所以我不明白如何编写和编译文档代码,因为它试图在其中复制一个 io_context。
提前感谢您的任何回复。
编辑:我一直在 C++ 17 上编译代码并使用柯南来管理提升,我遇到的问题来自构造函数,我试图将 io_context 复制到我的 class :
class Server {
public:
Server(boost::asio::io_context& io_context) : _io_context(io_context), _acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
{
startAccept();
}
~Server();
private:
void startAccept();
void handleAccept(ConnectionHandler::pointer new_connection, const boost::system::error_code &error);
boost::asio::io_context _io_context;
boost::asio::ip::tcp::acceptor _acceptor;
};
这是我在示例中遇到的编译错误:
error: use of deleted function
‘boost::asio::io_context::io_context(const boost::asio::io_context&)’17 | Server(boost::asio::io_context& io_context) :
_io_context(io_context), _acceptor(io_context,
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
/home/romsnouk/.conan/data/boost/1.75.0/_/_/package/634391908be52704fdd5c332658475fe91ab3b1d/include/boost/asio/io_context.hpp:639:3: note: declared here
639 | io_context(const io_context&) BOOST_ASIO_DELETED;
问题?当您尝试初始化 _io_context
成员时,您 复制 un-copyable io_context
对象。
_io_context
成员需要作为参考:
boost::asio::io_context& _io_context;
// ^
// Note ampersand, to make it a reference
这是 the full example 中所做的。
当然要确保原始io_context
对象的life-time至少和你创建的Server
对象一样长。
我一直在用 c++ 编写代码,想尝试使用 boost asio 来创建 TCP 异步服务器。
我阅读了 boost 提供的文档,并使用 boost 1.75 尝试编写此服务器的代码。
但是,我似乎不明白如何使用文档中的io_context。
当我编译第 3 天的代码时:异步 TCP 日间服务器(this link 在 boost 1.78 中,但似乎与 1.75 没有太大区别)我不断收到错误 io_context 无法复制,因为它们继承自 execution_context,而 execution_context 继承自 noncopyable
。
所以我不明白如何编写和编译文档代码,因为它试图在其中复制一个 io_context。
提前感谢您的任何回复。
编辑:我一直在 C++ 17 上编译代码并使用柯南来管理提升,我遇到的问题来自构造函数,我试图将 io_context 复制到我的 class :
class Server {
public:
Server(boost::asio::io_context& io_context) : _io_context(io_context), _acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
{
startAccept();
}
~Server();
private:
void startAccept();
void handleAccept(ConnectionHandler::pointer new_connection, const boost::system::error_code &error);
boost::asio::io_context _io_context;
boost::asio::ip::tcp::acceptor _acceptor;
};
这是我在示例中遇到的编译错误:
error: use of deleted function
‘boost::asio::io_context::io_context(const boost::asio::io_context&)’17 | Server(boost::asio::io_context& io_context) :
_io_context(io_context), _acceptor(io_context,
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
/home/romsnouk/.conan/data/boost/1.75.0/_/_/package/634391908be52704fdd5c332658475fe91ab3b1d/include/boost/asio/io_context.hpp:639:3: note: declared here
639 | io_context(const io_context&) BOOST_ASIO_DELETED;
问题?当您尝试初始化 _io_context
成员时,您 复制 un-copyable io_context
对象。
_io_context
成员需要作为参考:
boost::asio::io_context& _io_context;
// ^
// Note ampersand, to make it a reference
这是 the full example 中所做的。
当然要确保原始io_context
对象的life-time至少和你创建的Server
对象一样长。