4
通过“ tuple”和“ tie”实现比较运算符,好主意吗?
(注:tuple和tie可以从升压或C ++ 11获得。) 当只有两个元素编写小结构,我有时往往选择std::pair,因为所有重要的东西是该数据类型已经完成,像operator<严格弱排序。 缺点是几乎没有用的变量名。即使我自己创建了那个typedef,也不会在两天后记住确切的first含义second,尤其是当它们属于同一类型时。对于两个以上的成员,情况变得更糟,因为嵌套pair非常糟糕。 另一个选择是tuple,无论是Boost还是C ++ 11,但看起来并没有更好和更清晰。因此,我自己开始编写结构,包括所有需要的比较运算符。 由于特别operator<麻烦,我想到了仅依靠为定义的操作来规避整个混乱tuple: 的示例operator<,例如用于严格弱排序: bool operator<(MyStruct const& lhs, MyStruct const& rhs){ return std::tie(lhs.one_member, lhs.another, lhs.yet_more) < std::tie(rhs.one_member, rhs.another, rhs.yet_more); } (从传递的参数中引用tie一个。) tupleT& 编辑:从@DeadMG私下继承的建议tuple不是一个坏建议,但是它有很多缺点: 如果操作员是独立的(可能是朋友),我需要公开继承 通过强制转换,operator=可以轻松绕过我的函数/运算符(特别是) 有了tie解决方案,我可以省去某些成员,如果他们对订购无所谓 我需要考虑此实现中的任何缺点吗?