Глядя на следующий код, используемый для перегрузки нескольких вызываемых объектов, объединяя их в один вызываемый объект:
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)?Поскольку мы не можем наследовать от ссылок, как бы это было сделано.