【发布时间】:2017-06-07 13:51:09
【问题描述】:
所以this example from: 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()。有人可以解释这里的继承是如何工作的吗?
【问题讨论】:
-
如果你超过 10k,你可以看到我刚刚尝试了这个问题:stackoverflow.com/q/44414238/2642059@BaummitAugen 帮助我识别了继承。所以我想我现在问的问题是正确的。
标签: c++ operators variadic-templates specialization template-inheritance