所以这个例子来自:http ://en.cppreference.com/w/cpp/utility/variant/visit声明了专门的类型:
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
在此处构造为 r 值:
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);
我试图弄清楚这是如何工作的。overloaded
从这里继承的类型是什么?它看起来像一个 lambda 数组,但我不知道它会有一个operator()
. 有人可以解释继承在这里是如何运作的吗?