有时需一个类对象只是用于函数对象,这样,这个类对象就会重载很多的operator()函数,以下使用继承lambda的方式,可以在随时为函数对象增加接口,而不必去类中添加,方便了开发。
template<typename... Ts>
class overload : public Ts... {
public:
using Ts::operator()...;
};
template<typename... Ts>
overload(Ts...)->overload<Ts...>;
int main() {
auto fun = overload{
[](int a, int b) {return a + b; },
[](int a) {return a; }
};
constexpr int i = fun(12, 34);
}
中间使用了C++17的推导指引。