相关疑难解决方法(0)

通过'tuple'和'tie'实现比较运算符,这是一个好主意?

(注意: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);
}
Run Code Online (Sandbox Code Playgroud)

(从传递的参数中引用tie一个引用.) tupleT&


编辑:从@DeadMG到私有继承的建议tuple并不是很糟糕,但它有一些缺点:

  • 如果运营商是独立的(可能是朋友),我需要公开继承
  • 通过铸造,我的功能/操作员(operator=特别是)可以轻松绕过
  • 有了这个tie解决方案,如果他们对订购无关紧要,我可以省略某些成员

我需要考虑这个实现有什么缺点吗?

c++ tuples operators c++11 strict-weak-ordering

94
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1

c++11 ×1

operators ×1

strict-weak-ordering ×1

tuples ×1