其他分享
首页 > 其他分享> > c-Boost asio库最新版本中缺少方法的替代方法

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