2014-10-21 3 views
1

을 인수로 사용하고 std::function을 호출하는 래퍼 클래스 foo을 작성하려고합니다. 나는 실패 시도일반 std :: 함수에 대한 래퍼 클래스

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

또는 std::function이하는 것처럼 다른 방법은, 기능 유형 foo 변수화 할 수 있습니다

template<class T> 
class foo; 

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

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

Demo

관련 문제