Привет,
воткнул тут с
примером с 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);
}