Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost asio tcp套接字1.70不向后兼容_C++_Sockets_Boost_Version_Boost Beast - Fatal编程技术网

C++ boost asio tcp套接字1.70不向后兼容

C++ boost asio tcp套接字1.70不向后兼容,c++,sockets,boost,version,boost-beast,C++,Sockets,Boost,Version,Boost Beast,我正在为我的http服务器使用boostbeast。我根据BoostBeast文档(可能是1.66版)中提供的示例开始编写服务器。现在在Boost1.70之后,我遇到了编译问题。即使是1.69,一切都很顺利。问题出在我的课程中 template <typename RouterT> class session{ boost::asio::strand<boost::asio::io_context::executor_type> _strand; boos

我正在为我的http服务器使用
boostbeast
。我根据BoostBeast文档(可能是1.66版)中提供的示例开始编写服务器。现在在Boost1.70之后,我遇到了编译问题。即使是1.69,一切都很顺利。问题出在我的
课程中

template <typename RouterT>
class session{
    boost::asio::strand<boost::asio::io_context::executor_type> _strand;
    boost::asio::ip::tcp::socket _socket
    // ...
    explicit session(RouterT& router, boost::asio::ip::tcp::socket socket, std::shared_ptr<std::string const> const& doc_root)
        : _router(router), 
          _socket(std::move(socket)), 
          _strand(_socket.get_executor()), 
          _doc_root(doc_root), 
          _lambda(*this){

          }
};
我不确定的是,这个修改是否适用于旧版本的boost<1.70,因为我没有旧版本的boost安装。这样的改变行吗


这是正确的解决方案吗?或者我应该使用
tcp::socket
的执行器来构建串?

Boost.Asio引入了一个突破性的变化。执行器现在是每个I/O对象的模板参数。默认类型是
executor
,它是多态包装器。您可以从类型化执行器转换为多态包装器,但不能以其他方式(编译错误的原因)转换。您的修复是正确的,但是如果您希望在较旧版本的Boost.Asio上编译它,可能需要一些ifdef。

我想指出,您的解决方案可以通过声明类型为
Boost::Asio::strand
的串并将套接字保留为默认执行器类型来反转。
error: no matching function for call to ‘boost::asio::strand<boost::asio::io_context::executor_type>::strand(boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::executor>::executor_type)’
typedef boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::io_context::executor_type> socket_type;