C++17提供了overload模式,该模式的写法较为神奇,具体如下:
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
这是一个类模板的声明。其中:
template<class... Ts>:overloaded表示类的模板参数为可变长的参数包 Ts。
假设 Ts 包含 T1, T2, … , TN,那么这一句声明可以展开为:template<class T1, class T2, ..., class TN>
struct overloaded : Ts...:overloaded表示类的基类为参数包 Ts 内所有的参数类型。
假设 Ts 包含 T1, T2, … , TN,那么这一句声明可以展开为:struct overloaded : T1,