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

时间:2015-04-15 21:26:45

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

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

管理层在我们的产品中使用Boost已经死定了,主要是因为它已经臃肿了,并且由于我们过去曾遇到过与冲突有关的问题,因为我们的代码是静态的与客户代码链接(也可能使用boost,可能不是同一版本)。

Asio页面声称它可以在没有提升的情况下使用,虽然它非常含糊,后来它也说"使用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 ......

3 个答案:

答案 0 :(得分:1)

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

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

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

其他编译器不太确定 - 使用更新版本的gcc,没有问题,但4.4或4.3已经很老了。这已经足够长了,因为我在OS X上做了什么,我不确定编译器使用XCode 5.1。

答案 1 :(得分:0)

Asio可能正在使用placeholdersmart pointers甚至bind()函数,它们是boost的一部分,并且包含在C ++ 11标准库中。没有这些,你就不能使用asio。

答案 2 :(得分:-1)

https://github.com/chriskohlhoff/asio/tree/master/asio/src/examples

似乎Asio的例子充满了C ++ 03,C ++ 11和C ++ 14版本。在这种情况下,Asio应该使用C ++ 03