我正在尝试剖析这个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;
。
我已阅读How does the Comma Operator work和http://en.cppreference.com/w/cpp/memory/owner_less,但我不确定其目的是什么。
std::set
实际存储了什么? std::owner_less
实际上做了什么?制作具有此结构的容器而不是自己存储connection_hdl
的目的是什么?
答案 0 :(得分:8)
这与逗号运算符无关。 set<T>
要求T
低于可比性,即应为operator <
定义T
。原因是该集合以有序的方式(通过一种树或另一种树)保持其元素。您可以提供带有第二个模板参数的集合 - 一个比较两个元素的仿函数,以便集合可以使用该比较。 std::owner_less
是一个谓词模板,它对共享和弱指针进行操作,并执行基于所有者(而不是基于值)的排序。