2014-10-21 92 views
1

我想写一个包装类foo需要std::function作为参数,并公开一个方法来调用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(); 
} 

这并不编译并提供了以下错误

error C2091: function returns function 

我怎样才能使这项工作?

回答

3

更改此:

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

这个

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

Demo

或者你也可以参数化foo与功能型,像std::function作用:

template<class T> 
class foo; 

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

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

Demo