2013-02-14 82 views
1

嘗試將拉姆達傳遞給構造函數:我想傳遞一個lambda作爲參數

#include <functional> 
#include <exception> 

template<typename R> 
class Nisse 
{ 
    private: 
     Nisse(Nisse const&)    = delete; 
     Nisse(Nisse&&)     = delete; 
     Nisse& operator=(Nisse const&) = delete; 
     Nisse& operator=(Nisse&&)  = delete; 
    public: 
     Nisse(std::function<R> const& func) {} 
}; 

int main() 
{ 
    Nisse<int> nisse([](){return 5;}); 
} 

當我編譯我得到一個錯誤信息:

Test.cpp: In function ‘int main()’: 
Test.cpp:19:39: error: no matching function for call to ‘Nisse<int>::Nisse(main()::<lambda()>)’ 
Test.cpp:19:39: note: candidate is: 
Test.cpp:14:9: note: Nisse<R>::Nisse(const std::function<R>&) [with R = int] 
Test.cpp:14:9: note: no known conversion for argument 1 from ‘main()::<lambda()>’ to ‘const std::function<int>&’ 

回答

5

該類型的模板arg的到std::function是錯誤的。嘗試使用

Nisse(std::function<R()> const& func) {} 

具體來說,模板參數必須是一個函數類型,但所有你經過是所需的返回類型。

+1

謝謝。在C++ 11中仍然是我的牙齒 – 2013-02-14 17:32:33