c-Boost asio库最新版本中缺少方法的替代方法
作者:互联网
几年前,我使用Boost asio库编写了一个电子邮件客户端.
有一个带有四个子类的抽象类ICON.
POP3conN到平面POP3通信
POP3conS可确保POP3通信的安全
SMTPconN到平面SMTP通信
SMTPconS保护SMTP通信安全
ICON有一个会员
boost::asio::ip::tcp::socket socket_
和两个虚拟过程,在echa子类中定义:
void SMTPconN::run() { socket_.get_io_service().run(); }
void SMTPconN::reset() { socket_.get_io_service().reset(); }
该应用程序在boost_1_63_0上运行良好.但是,当我尝试更新到boost_1_70_0时,编译器(MS V Studio 2015)在这两个定义中都抱怨:
class "boost::asio::ssl::stream<boost::asio::ip::tcp::socket>" has no member "get_io_service".
因为我想对大量的代码和复杂的逻辑进行最小的更改:此遗漏方法是否有解决方法?
解决方法:
在Networking TS compatibility下的文档状态中,可以使用get_context().context(),这将为您提供io_context实例(它在IRC 1.64 / 1.65 IIRC附近替换了io_service).
Networking TS compatibility
Boost.Asio now provides the interfaces and functionality specified by the “C++ Extensions for Networking” Technical Specification. In addition to access via the usual Boost.Asio header files, this functionality may be accessed through special headers that correspond to the header files defined in the TS. These are listed in the table below:
[…]
Use get_executor().context() to obtain the associated io_context.
get_io_service()和get_io_context()以前都在方便移植的地方,但是与此同时,它们也已被弃用和废弃.
PS:另请参见Get boost::asio::io_context from a boost::asio::ip::tcp::socket to exec a custom function,它与您的问题极为相似,但指定了特定的用例.
那里的评论针对该用例具有绝对更好的解决方案:
socket.get_io_service().post([](){ /* my custom code */ } );
变
post(socket.executor(), [](){ /* my custom code */ } );
标签:c,boost,boost-asio 来源: https://codeday.me/bug/20191012/1901380.html