泛型std::函数上的包装器类

Wrapper class over generic std::function

本文关键字:包装 std 函数 泛型      更新时间:2023-10-16

我正试图编写一个包装类foo,该类以std::function为参数,并公开一个调用该std::function的方法。我尝试了以下,但没有成功

template<class R, class ...Args>
class foo
{
public:
    foo(std::function<R(Args...)> f)
        :_f(f)
    {        
    }
    R invoke(Args... args)
    {
        return _f(args...);
    }
private:
    std::function<R(Args...)> _f;
};
int main()
{
    foo<void()> f([&](){ std::cout << "hin"; });
    f.invoke();
}

这不会编译,并给出以下错误

error C2091: function returns function

我怎样才能做到这一点?

更改此项:

foo<void()> f([&](){ std::cout << "hin"; });

到这个

foo<void> f([&](){ std::cout << "hin"; });

演示

或者,您可以使用函数类型参数化foo,就像std::function所做的那样:

 template<class T>
 class foo;
 template<class R, class ...Args>
 class foo<R(Args...)> {...};
 foo<void()> f([&](){ std::cout << "hin"; });

演示