(注意:tuple
并且tie
可以取自 Boost 或 C++11。)
在编写只有两个元素的小型结构时,我有时倾向于选择 a 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
引用。)tuple
T&
编辑:@DeadMG 提出的私下继承的建议tuple
不错,但也有不少缺点:
- 如果运营商是独立的(可能是朋友),我需要公开继承
- 通过强制转换,我的函数/运算符(
operator=
特别是)可以很容易地被绕过 - 使用该
tie
解决方案,如果某些成员对订购无关紧要,我可以忽略它们
我需要考虑此实现中的任何缺点吗?