最佳答案
(注意: tuple
和 tie
可以取自 Boost 或 C + + 11。)
当编写只包含两个元素的小结构时,我有时倾向于选择 std::pair
,因为所有重要的事情都已经针对该数据类型完成了,比如用于严格弱排序的 operator<
。
不过,缺点是变量名几乎没什么用。即使我自己创建了 typedef
,我也不会记得2天后 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
从传递的参数中生成 T&
引用的 tuple
。)
编辑 :@DeadMG 提出的从 tuple
私有继承的建议并不坏,但它也有一些缺点:
operator=
specifically) can be easily bypassedtie
解决方案,如果某些成员对订单不重要,我可以省略它们这个实现中有什么我需要考虑的缺点吗?