提升asio和c ++ 11是一个很好的匹配吗?

Toa*_*oad 7 c++ sockets boost-asio c++11

我的客户希望我制作一个高性能,可靠的服务器,通过套接字接收数据流.他希望它是用c ++编写的

已经有一段时间我正在做c ++全职工作,所以我一直在阅读.对于c ++中的网络来说,Asio似乎是一个不错的选择,而c ++ 11似乎是一个很棒的新版本的c ++,具有很多新功能.

我的问题:是否可以可靠地使用它们?是否有意义?我应该避免像lambdas这样的某些c ++ 11功能吗?

Dav*_*rtz 7

你可以将它们中的两个一起使用而没有任何问题.对于在Boost和C++ 11 STL中实现的内容,您可以选择使用它.在大多数情况下,它几乎没有什么区别.如果您使用Boost,您也可以移植到C++ 03平台(至少,如果它不直接使用C++ 11功能,那么代码的一部分就是如此).

Boost经过精心设计,能够充分利用C++ 11的功能,而无需提供"愚蠢"的界面或性能不佳以支持其他地方.

如果您需要良好的异步I/O,则需要一些库来提供它.无论你是否使用C++ 11,Boost都很难被击败.

如果您的问题是"是否有某些特定原因我不想使用Boost与C++ 11或C++ 11与Boost",答案是否定的.如果您需要Boost提供的某些功能,例如asio,并且只需要支持C++ 11平台,那么它们就是您应用程序的完美匹配.


Jer*_*fin 7

我将主要基于你计划的目标编译器"避免C++ 11特性".我没有看到任何理由避免lambdas - 所有主要编译器都已经支持它们,并且它们在可读性方面提供了实质性的改进.

另一方面,根据您关注的编译器,您可能希望/需要避免使用可变参数模板和/或支持的初始化列表.


Art*_*yom 6

请参阅,boost.asio是用于事件驱动编程的网络库 - 许多回调,C++ 11 lambda使编写回调变得非常容易.

基本上C++ 11和Asio的结合使得开发更容易,并使您的代码更加干净和可读

  • Lambda也比通过bind做回调更快,当然比为一切编写自定义仿函数更容易 (2认同)