(注: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解决方案,我可以省去某些成员,如果他们对订购无所谓
我需要考虑此实现中的任何缺点吗?