假设我的设置中有自定义类型,并且只有在某些属性上所有项目具有相同值时才设置/排序...如果插入了具有不同值的项目,则模型被搞砸了,我想要保护这个.
我想也许比较函数可能是我们可以测试它(作为断言或异常)的地方,以标记问题和/或防止项目被插入.例如,在TypeName上,如果重要属性不相等,则operator <()始终返回false.
这合理吗?
我想把它放在比较器中可能会有问题,因为当它被调用时你没有得到任何保证.也许一些神话般的实现在项目数量较少时将项目存储在列表中,并且直到稍后才调用比较器?
可能最简单的方法是将std::set
执行这些断言的保护性外层包装起来.
class MySet {
private:
std::set<myFunkyType> myType;
public:
void insert(myFunkyType type) {
assert(!type.isFunky(), "funk violation");
// and so on
}
// all other members other than insertion or mutation just delegate to the
// underlying set
Run Code Online (Sandbox Code Playgroud)
}