2013-03-29 18 views
5

私はこのwebsocket ++の例を解読しようとしていますhttps://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppstd :: set <VALUE、std :: owner_less <VALUE>>の目的は何ですか?

ライン126では、typedef std::set<connection_hdl,std::owner_less<connection_hdl>> con_list;があります。なぜそれが単にtypedef std::set<connection_hdl> con_list;ではないのだろうと思っています。

私はHow does the Comma Operator workhttp://en.cppreference.com/w/cpp/memory/owner_lessを読んだことがありますが、その目的が分かりません。

実際にはstd::setには何が格納されていますか? std::owner_lessは実際に何をしていますか? connection_hdl自体を格納するのではなく、この構造のコンテナを作る目的は何ですか?

+2

これはコンマ演算子とは関係がなく、 'std :: owner_less'のためにリンクしたページはあなたの質問に直接答えなければなりません。 – ildjarn

+1

'std :: set'は複数のテンプレートパラメータをとりますが、最初のものだけが明示的に必要です。残りの部分には、定義していない場合はデフォルトの型があります。 2番目のパラメータは、ソートに使用されるバイナリ関数です。 –

+2

ところで、 'connection_hdl'は' std :: weak_ptr 'です。 –

答えて

8

これはカンマ演算子とは関係ありません。 set<T>の場合、Tは同等以下である必要があります。つまり、operator <Tに定義する必要があります。これは、セットがその要素を(1種類のツリーまたは別の種類を介して)順序付けられた方法で保持するためです。 2つ目のテンプレート引数 - セットがその比較を使用できるように2つの要素を比較するファンクタ - をセットに与えることができます。 std::owner_lessは、共有ポインタと弱ポインタ​​で動作し、(値に基づくのではなく)オーナベースの順序付けを実行する述語テンプレートです。

関連する問題