我正在寻找库来帮助构建可扩展的 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/