bay*_*yda 10 c++ idioms tuples c++11
有时我需要写一些丑陋的算符,
例如
lhs.date_ < rhs.date_ ||
lhs.date_ == rhs.date_ && lhs.time_ < rhs.time_ ||
lhs.date_ == rhs.date_ && lhs.time_ == rhs.time_ && lhs.id_ < rhs.id_ .....
Run Code Online (Sandbox Code Playgroud)
它让我非常恼火.
所以我开始避免写下面的内容:
std::make_tuple( lhs.date_, lhs.time_, lhs.id_ ) <
std::make_tuple(rhs.date_, rhs.time_, rhs.id_ );
Run Code Online (Sandbox Code Playgroud)
我几乎感到高兴,但请注意,我可能使用元组而不是他们的目的让我担心.
你能否批评这个解决方案?
或者这是一个很好的做法?
你怎么避免这种比较?
更新:
感谢指向std :: tie以避免复制对象.
并感谢指出重复的问题
K-b*_*llo 12
std::tuple比较运算符的声明表明:
比较LHS和rhs字典顺序,即,比较第一元素,如果它们是相等的,比较第二元件,如果这些是等效的,比较了第三元件,等等.
所以,你在做什么,不必创建不必要的临时对象的可能性,其他(可能优化掉),似乎确定了我.
注意等效的手段,!( lhs < rhs ) && !( rhs < lhs )而不是lhs == rhs,这是平等的.假设你的班级的等同和平等意味着相同,这就没问题.请注意,这与例如访问set/ map按键没有什么不同.
为了避免临时性,你可以使用std::tie它为它的参数创建一个左值引用元组:
std::tie( lhs.date_, lhs.time_, lhs.id_ ) <
std::tie( rhs.date_, rhs.time_, rhs.id_ );
Run Code Online (Sandbox Code Playgroud)
以类似的方式,std::forward_as_tuple制作一组rvalue引用.
| 归档时间: |
|
| 查看次数: |
3915 次 |
| 最近记录: |