【发布时间】:2013-03-20 15:50:49
【问题描述】:
我正在尝试剖析这个 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_hdls的目的是什么?
【问题讨论】:
-
这与逗号运算符无关,您链接到
std::owner_less的页面应该直接回答您的问题。 -
std::set接受多个模板参数,但只有第一个是明确需要的;如果你没有定义它们,其余的都有默认类型。第二个参数是一个用于排序的二元函数。 -
顺便说一句,
connection_hdl是std::weak_ptr<void>。 -
@Joe :如果您阅读链接到的页面,您会知道
std::weak_ptr<>没有operator<,因此如果没有特殊的比较器,它根本无法编译。 ;-] -
@ildjarn 哦,好吧。我是 C++ 的新手,所以花了一段时间才沉浸在大声笑中。你说得更清楚了。太棒了!