我有代码,可以查询结构以查找所有符合某些条件std::set
的类型对象。A
我经常希望我的查询条件是这样的,即代码返回一个只包含一个对象的集合。在这些情况下,如果查询没有只产生一个结果,我会希望我的代码失败。所以我想做一个函数
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);}
这是一个坏主意吗?它确实符合执行取消引用的间接运算符的概念。但是我找不到一个严格的定义间接操作符根据标准应该做什么,以确保我是否在歪曲它的标准使用(太远了)。