Вопрос по std::variant
От: pva  
Дата: 06.06.25 11:57
Оценка: 2 (1) +2
Привет,

воткнул тут с примером с cppref.
template<class... Ts>
struct overloaded : Ts... { using Ts::operator()...; };
...
for (auto& v: vec) {
  std::visit(overloaded{
    [](auto arg) { std::cout << arg << ' '; },
    [](double arg) { std::cout << std::fixed << arg << ' '; },
    [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; }
  }, v);
}


А можно ли сделать подобное для бинарных операций?
using value_t = std::variant<int, long, double, std::string>;
...
// как должна выглядеть applyOp чтобы можно было записать?
value_t operator+(const value_t& l, const value_t& r) {
  return applyOp(l, r, overloaded {
    [](const auto& l, const auto& r) { return l + r; },
    [](const std::string& l, const auto& r) { return l + std::to_string(r); }
  });
}


p.s. Отвечу сам себе
value_t operator+(const value_t& l, const value_t& r) {
  return std::visit(overloaded {
    [](const auto& l, const auto& r) { return l + r; },
    [](const std::string& l, const auto& r) { return l + std::to_string(r); }
  }, l, r);
}
newbie
Отредактировано 06.06.2025 12:11 pva . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.