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