Я пытаюсь разобрать этот пример websocket ++ https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
В строке 126 есть typedef std::set<connection_hdl,std::owner_less<connection_hdl>> con_list;
, Мне интересно, почему это не просто typedef std::set<connection_hdl> con_list;
,
я прочел Как работает оператор запятой а также http://en.cppreference.com/w/cpp/memory/owner_less но я не уверен, какова цель.
Что на самом деле хранится в std::set
? Что значит std::owner_less
на самом деле делать? Какова цель создания контейнера с этой структурой вместо хранения connection_hdl
сами?
Это не имеет ничего общего с оператором запятой. set<T>
требует, чтобы T
быть менее сопоставимым, т.е. operator <
должны быть определены для T
, Причина этого заключается в том, что множество хранит свои элементы упорядоченным образом (с помощью одного вида дерева или другого). Вы можете задать набор вторым аргументом шаблона — функтором, который сравнивает два элемента, чтобы набор мог использовать это сравнение. std::owner_less
является шаблоном предиката, который работает с общими и слабыми указателями и выполняет упорядочение на основе владельца (а не на основе значения).
Других решений пока нет …