在编译C++一些网络库时,比如Websocket++、Crow等C++ web框架都是基于Asio进行开发的,并且都支持两种Asio。如果定义了ASIO_STANDALONE
则会使用Asio,如果未定义则会使用Boost.Asio,那么这两者有什么区别呢?
Asio官网:http://think-async.com/Asio
Boost官网:https://www.boost.org/
在Asio的官网对Asio和Boost.Asio这两个的区别进行了详细的阐述,主要的差异如下。
Asio有两种变体,Asio(非Boost)和Boost.Asio,两者的差异概述如下。
1 源代码有什么区别?
- Asio主要位于命名空间
asio::
中,而Boost.Asio则位于boost::asio::
中; - Asio的主要头文件为
asop.hpp
,而Boost.Asio对应的头文件为boost/asio.hpp
,其他头文件也是类似的变动; - Asio使用的宏或者定义宏都以
ASIO_
开头,而Boost.Asio则以BOOST_ASIO_
开头; - Asio包含一个用于启动线程的类
asio::thread
,而Boost.Asio则不包含这个类,避免与Boost.Thread
产生重叠和冲突; - Boost.Asio 始终使用 Boost.System 库来提供对错误代码 (
boost::system::error_code
和boost::system::system_error
) 的支持。对于 C++11 及更高版本,Asio 使用 编译器附带的std::error_code
和std::system_error
,Asio 在其自己的命名空间中为这些名称添加别名(asio::error_code
和asio::system_error
),并且当面向 C++03 时,提供这些类的最小实现。如果以 C++03 为目标很重要,那么值得注意的是,这些类的 Boost.System 版本目前比这个最小实现支持更好的用户定义错误代码可扩展性。 - 使用Asio只包含头文件即可,不需要链接任何Boost库,当使用C++11版本的编译器,比如支持C++11的gcc、clang或者MSVC时可以考虑使用Asio而不依赖Boost库;Boost.Asio 始终要求您使用 Boost.System 库,如果您想使用boost::thread. 这可能需要链接这些库,但值得注意的是,最新版本的 Boost 允许您在仅标头模式下使用 Boost.System。
2 从哪里下载Asio和Boost.Asio?
可以从SourceForge下载Asio:https://sourceforge.net/projects/asio/files/asio/
Boost.Asio包含在Boost1.35以及更高版本中,Boost可以从Github下载:https://github.com/boostorg/boost,也可以从Boost官网下载:https://www.boost.org/users/history/。
3 源代码仓库在哪里?
Asio:https://github.com/chriskohlhoff/asio/
Boost.Asio:https://github.com/boostorg/asio/
4 既然Boost.Asio包含在了Boost中,Asio会停止维护吗?
不会。有一些项目使用 Asio,它们将继续受到支持。
5 我应该使用Asio还是Boost.Asio?
- 如果你更喜欢仅包含头文件,那么建议使用Asio而不是Boost.Asio
- 如果你必须使用Boost 1.35之前的版本,那么不包括Boost.Asio,在这种情况下建议使用Asio而不是Boost.Asio
- Asio和Boost.Asio软件包的新版本更新会比Boost更加频繁和快速,如果你想使用最新版本,那么建议使用Asio而不是Boost.Asio
6 Asio和Boost.Asio可以在同一个程序中共存吗?
可以。
由于它们使用不同的命名空间,因此不应该发生冲突,尽管显然类型本身是不可互换的。(如果您想知道为什么要这样做,请考虑程序正在使用也在内部使用 Asio 的第三方库的情况。)
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – Asio和Boost.Asio的区别
原文链接:https://www.stubbornhuang.com/2696/
发布于:2023年06月26日 17:51:15
修改于:2023年06月26日 17:51:15
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50