Код: Выделить всё
bool Result = false;
auto CachedValue = ...; // std::variant
const auto& FirstValue = ...; // std::variant
if (auto ValIndex = CachedValue.index(); ValIndex == FirstValue.index())
{
switch (m_Relation)
{
case RELATION::EQ: Result = (CachedValue == FirstValue); break;
case RELATION::NE: Result = (CachedValue != FirstValue); break;
case RELATION::GT: Result = (CachedValue > FirstValue); break;
case RELATION::LE: Result = (CachedValue = FirstValue); break;
. . . . .
}
}
return Result;
РЕДАКТИРОВАТЬ: Во-первых, моя задача не имеет ничего общего с численными расчетами; в противном случае использование std::variant будет неуместным. Во-вторых, у меня есть математическое образование, и я полностью осведомлен об элементарных свойствах равенства и порядка. И в-третьих, я не спрашиваю, как сравнивать значения с плавающей запятой. Я спрашиваю о том, что кажется мне интересным упражнением по программированию: как переопределить стандартное сравнение типов POD, составляющих std::variant, без слишком большого увеличения размера кода и потери читабельности?
К счастью, среди массы не относящихся к делу замечаний и минусов иногда все же можно найти парочку полезных комментариев. Я им благодарен.
Подробнее здесь: https://stackoverflow.com/questions/790 ... stdvariant