c++ - 可以在没有 boost 或 C++11 的情况下使用 Asio 吗?

标签 c++ c++11 boost boost-asio

我正在寻找库来帮助构建可扩展的 tcp/ip 服务器,而 Boost::ASIO 看起来非常适合让异步套接字 i/o 跨平台均匀工作(我们至少需要支持 OSX、Linux x86、和 Windows,可能是 Solaris,也可能是 HP-UX 和 AIX)。

管理层坚决反对在我们的产品中使用 Boost,主要是因为它“臃肿”,而且由于我们过去遇到过冲突问题,因为我们的代码与客户代码静态链接(这可能也正在使用 boost,可能不是同一个版本)。

Asio page claims that it can be used without boost,虽然它很含糊,后来它还说“当使用C++11时……Asio可以独立于Boost使用……”,这似乎暗示它不会在 C++03 编译器上工作。我在想我可以在包含标题之前简单地执行“#define asio proprietary_asio”以避免符号冲突问题。

我刚刚在我的本地机器上测试了 VS2013,它编译了;有谁知道需要哪些特定的 C++11 功能?我需要(至少)在 Windows 上支持 VS2012/2013,在 Linux 上支持 gcc 4.4(也许是 4.3),在 OSX 上支持 XCode 5.1。

我猜问题出在旧版本的 GCC 上......

最佳答案

我在 MS VC++ 2013 中使用了 ASIO,没有使用 Boost 的任何其他部分。

大多数 ASIO 代码使用 boost::bind,但 VC++ 2013 包含一个可以很好地完成这项工作的 std::bind。相当多的 Boost 演示代码也使用 boost::array,但这只是一个相当普通的数组——您可以使用 std::array std::vector,或任何数量的其他可能性。

警告:虽然这对我所做的工作很好,但我很确定我没有使用过 ASIO 的所有部分,而且我更加确定我没有尽可能地将它们组合起来方式。因此,我可以说它已经奏效了,我不记得有任何问题似乎与缺乏使用 Boost 的其他部分有关,但在当时,总是有可能(取决于你使用什么以及如何使用)您可能会遇到我从未遇到过的问题(例如,与 boost::bind 一起工作的问题,但在 VC++ 2013 的 std 实现中不起作用(至少以相同的方式)::绑定(bind)

其他编译器不太确定——使用较新版本的 gcc 不会有问题,但 4.4 或 4.3 已经相当老了。自从我在 OS X 上做任何事情以来已经够久了,我不确定 XCode 5.1 的编译器是什么。

关于c++ - 可以在没有 boost 或 C++11 的情况下使用 Asio 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661237/

相关文章:

c++ - 数组问题 (if (zeds[i].x == zeds[i].x))

c++ - glGenBuffers - 释放内存?

c++ - "Defaulted" move 构造函数和赋值 - 奇怪的行为

c++ - 启用多线程 Eclipse C++

C++ 是否有任何线程安全的组件可以写入(比没有锁的线程安全类似物更快)?

c++ - 在 boost 库之间找不到 cpp_bin_float

c++ - 违反严格别名,即使没有任何转换?

c++ - C++中调用类模板的函数模板

c++ - 如何将临时 C 数组传递到 constexpr 容器中

c++ - 哪些 Boost.Asio 调用返回哪些 Boost 错误代码/条件?