C ++重载的访客视图

时间:2019-02-24 16:33:06

标签: c++ functional-programming overloading

查看以下用于重载多个可调用对象的代码,将它们组合为一个可调用对象:

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)?由于我们无法从引用中继承该方法。

0 个答案:

没有答案