Возможный дубликат:
Реализовать операторы сравнения через 'tuple' и 'tie', хорошая идея?
иногда мне нужно написать несколько уродливых функторов
например.
lhs.date_ < rhs.date_ ||
lhs.date_ == rhs.date_ && lhs.time_ < rhs.time_ ||
lhs.date_ == rhs.date_ && lhs.time_ == rhs.time_ && lhs.id_ < rhs.id_ .....
меня это очень раздражало.
Поэтому я начал избегать написанного ниже:
std::make_tuple( lhs.date_, lhs.time_, lhs.id_ ) <
std::make_tuple(rhs.date_, rhs.time_, rhs.id_ );
и я почти счастлив, но то, что я, вероятно, использую кортежи не по их назначению, заставляет меня беспокоиться.
Не могли бы вы покритиковать это решение?
Или это хорошая практика?
Как избежать подобных сравнений?
ОБНОВЛЕНИЕ:
Спасибо, что указали на std::tie, чтобы избежать копирования объектов.
И спасибо, что указали на повторяющийся вопрос
std::make_tuple
делает копии объектов, которые вы ему передаете (если вы не используетеstd::ref
илиstd::cref
) -- чтобы сравнить существующие объекты без создания копий, используйтеstd::forward_as_tuple
илиstd::tie
вместоstd::make_tuple
. - person ildjarn   schedule 30.05.2012