2012-09-08 6 views
7

私のクライアントは、ソケットを介してデータストリームを受信する高性能で信頼性の高いサーバーを作りたいと考えています。彼はそれがC++になることを期待していますboost asioとC++ 11は良い一致ですか?

私はちょっと読んでいたので、私はフルタイムでC++をやっていました。 AsioはC++でのネットワーキングのための良い賭けと思われ、C++ 11は多くの新機能を備えたC++の素晴らしい新バージョンのようです。

私の質問:両方を確実に使用できますか?それは理にかなっていますか? lambdaのような特定のC++ 11の機能を避けるべきですか?

答えて

6

私は、主にあなたの計画されたターゲットコンパイラに「回避するためのC++ 11の機能」をベースにしています。私はラムダを避ける理由は見当たりません - すべての主要なコンパイラはすでにそれらをサポートしており、それらは読みやすさを大幅に改善しています。

一方、気になるコンパイラに応じて、バリデーショナルなテンプレートや括弧付きイニシャライザリストのようなものを避けたい/必要があるかもしれません。

+0

もう1つ注目すべきことは、regexのサポートです。 GCC 4.7は完成したようですが、 'regex_search'のようなものは動作しません。 –

+0

@ jerrycoffin gccコンパイラは私の最善の策ですか? (私はMacで開発し、未定義の(まだ)Unixボックスをターゲットにします)。それとも、まだ有効な選択肢ですか?私はxcodeのiphoneの開発でそれを使用しました。静的なアナライザーでは興奮していません。 – Toad

+0

@Toad:gccは確かに他のプラットフォームでもサポートされています。今のところ、ClangはOS/X上で問題なく、Linux上で半妥当であり、Windowsでは使用できず、他のほとんどのプラットフォームに移植されていません。 –

6

これらの2つを問題なく一緒に使用できます。 BoostとC++ 11 STLの両方で実装されているものについては、これを使用するのがあなたの選択です。ほとんどの場合、ほとんど違いはありません。 Boostを使用すると、C++ 03プラットフォームに移植することができます(少なくとも、C++ 11の機能を直接使用しない場合はコードの一部になります)。

ブーストは、「ダムダウン」インターフェイスを提供したり、パフォーマンスが低下していない場所をサポートすることなく、C++ 11の機能を利用できるように慎重に設計されました。

良い非同期I/Oが必要な場合は、それを提供するライブラリが必要です。 Boostは、C++ 11を使用しているかどうかに関係なく、かなり難しいです。

質問が「Boost with C++ 11またはC++ 11 with Boost」を使用したくない具体的な理由がある場合は、答えは「いいえ」です。 Boostは、asioのように、C++ 11プラットフォームのみをサポートする必要がある機能を必要とする場合、アプリケーションに最適です。

+0

偉大な洞察力cを言及しています。どうもありがとう! – Toad

5

boost.asioは、イベント駆動型プログラミングのためのネットワークライブラリです。コールバックがたくさんあるので、C++ 11ラムダはコールバックを非常に簡単に作成します。

基本的にはC++ 11とASIOはそれがはるかに容易に開発することができますし、あなたのコードがはるかにきれいになるだろうと読める

+2

Lambdasはバインドを介してコールバックを行うよりも高速であり、確かにすべてのカスタム関数を書くよりも簡単です – ltjax

2

ASIO documentationの組み合わせは、特に++ 11のサポート

+0

良い点。私はそれほど遠くの文書を読んでいませんでした。 – Toad

関連する問題