C++ 泛型std::函数上的包装类

C++ 泛型std::函数上的包装类,c++,visual-studio-2013,lambda,C++,Visual Studio 2013,Lambda,我试图编写一个包装类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) {

我试图编写一个包装类
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 << "hi\n"; });
    f.invoke();
}
我如何才能做到这一点?

更改此选项:

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

foo<void()> f([&](){ std::cout << "hi\n"; });
foo<void> f([&](){ std::cout << "hi\n"; });
 template<class T>
 class foo;

 template<class R, class ...Args>
 class foo<R(Args...)> {...};

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