C ++ перегруженный вид посетителя - PullRequest
0 голосов
/ 24 февраля 2019

Глядя на следующий код, используемый для перегрузки нескольких вызываемых объектов, объединяя их в один вызываемый объект:

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)?Поскольку мы не можем наследовать от ссылок, как бы это было сделано.

...