查看以下用于重载多个可调用对象的代码,将它们组合为一个可调用对象:
template<typename... F>
struct overloaded;
template<typename F, typename... Frest>
struct overloaded<F, Frest...> : F, overloaded<Frest...>
{
overloaded(F&& f0, Frest&&... rest)
: F(std::forward<F>(f0))
, overloaded<Frest...>(std::forward<Frest>(rest)...)
{}
using F::operator();
using overloaded<Frest...>::operator();
};
template<typename F>
struct overloaded<F> : F
{
overloaded(F&& f0)
: F(std::forward<F>(f0))
{}
using F::operator();
};
template<typename... F>
auto overload(F&&... fs)
{
return overloaded<F...>(std::forward<F>(fs)...);
}
是否可以在不拥有可调用对象的情况下创建类似的重载可调用对象(有点像function_view)?由于我们无法从引用中继承该方法。