假设有一些现有的函数对象:
struct incr {
int operator()(int x) const { return x + 1; }
};
struct rep_str {
std::string operator()(const std::string& s) const { return s + s; }
};
我想知道是否有可能实现这样的功能:
auto f = overload<incr, rep_str>();
f(1); // returns 2
f("hello"); // returns "hellohello"
多个重载函数可能如下所示:
auto f = overload<fa, fb, fc, ...>();
// or...
auto g = overload<fa, overload<fb, overload<fc, ...>>>();
我正在考虑使用SFINAE和
std::result_of_t
之类的东西,但还没有想清楚如何做。
overload< X, overload< Y, Z > >
还是overload< X, Y, Z >
? - Xeren Narcyoverload<X, overload<Y, Z>>
对我来说看起来像是嵌套的对,而overload<X, Y, Z>
则让我想起了元组(这样我们就可以做overload_cat
或类似的事情)。 - Zizheng Tai