我的一个客户希望我制作一个高性能、可靠的服务器,通过套接字接收数据流。他希望它在 c++ 中
我一直在全职做 C++,所以我一直在阅读。Asio 似乎是 c++ 网络的一个不错的选择,而 c++11 似乎是一个很棒的 c++ 新版本,具有许多新功能。
我的问题:是否可以可靠地使用两者?是否有意义?我应该避免某些 c++11 功能,如 lambdas 吗?
我的一个客户希望我制作一个高性能、可靠的服务器,通过套接字接收数据流。他希望它在 c++ 中
我一直在全职做 C++,所以我一直在阅读。Asio 似乎是 c++ 网络的一个不错的选择,而 c++11 似乎是一个很棒的 c++ 新版本,具有许多新功能。
我的问题:是否可以可靠地使用两者?是否有意义?我应该避免某些 c++11 功能,如 lambdas 吗?
您可以毫无问题地同时使用它们两个。对于在 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 平台,那么它们非常适合您的应用程序。
我将主要基于您计划的目标编译器的“要避免的 C++11 功能”。我认为没有任何理由避免使用 lambda——所有主要编译器都已经支持它们,并且它们在可读性方面提供了实质性的改进。
另一方面,根据您关心的编译器,您可能希望/需要避免诸如可变参数模板和/或大括号初始化列表之类的事情。
看,boost.asio 是用于事件驱动编程的网络库 - 大量回调,C++11 lambda 使得编写回调非常容易。
基本上 C++11 和 Asio 的结合使开发变得更加容易,并使您的代码更加干净和可读
asio文档特别提到了 c++11 支持