(注: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
一个。) tuple
T&
编辑:从@DeadMG私下继承的建议tuple
不是一个坏建议,但是它有很多缺点:
- 如果操作员是独立的(可能是朋友),我需要公开继承
- 通过强制转换,
operator=
可以轻松绕过我的函数/运算符(特别是) - 有了
tie
解决方案,我可以省去某些成员,如果他们对订购无所谓
我需要考虑此实现中的任何缺点吗?