<分区>
我有代码,我可以查询一个 std::set
类型的对象的结构,这些对象都符合某些条件。我经常希望我的查询条件是这样的:代码返回一个只包含一个对象的集合。在这些情况下,如果查询没有只产生一个结果,我会希望我的代码失败。所以我想做一个函数
A& deref_or_throw(std::set<A> s)
{ if (s.size() != 1) throw ...; return *s.begin(); }
如果集合包含多个(或没有)元素,则抛出异常,否则取消引用第一个元素。
为简洁起见,我想重载未为 std::set
定义的间接运算符:
A& operator*(std::set<A>& s) {return deref_or_throw(s);}
这是个坏主意吗?它确实符合执行取消引用的间接运算符的概念。但是我找不到一个严格的定义来说明间接运算符应该根据标准做什么,以确保我是否在歪曲它的标准用法(太过分了)。