从 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对象一样长。