2014-09-01 79 views
0

我有以下代碼:G ++問題的std ::功能

#include <functional> 

std::function<int,int> p; 

int main() 
{ 

return 0; 
} 

我使用的MinGW克++ 4.8.1該失敗並

C:\main.cpp|4|error: wrong number of template arguments (2, should be 1)| 

c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional|1866|error: provided for 'template<class _Signature> class std::function'| 

C:\main.cpp|4|error: invalid type in declaration before ';' token| 

是這樣的G ++錯誤或我使用的std :: function incorrectly

回答

2

std::function<int(int)> for function take int and return int。例如

int foo(int); 

std::function<void(int,int)> for函數需要兩個整數並且沒有返回值。例如

void foo(int, int); 
1

std::function需要一個模板參數 - 它環繞的可調用對象的類型。所以,如果你想構建一個返回Ret類型的std::function並且帶有類型爲Arg1, Arg2,..., ArgN的參數,那麼你會寫std::function<Ret(Arg1, Arg2,..., ArgN)>

(請注意,橢圓不意味着指示參數包擴展 - 他們只是被在常規數學意義上)

1

當編譯器說的std ::函數有一個模板參數。

使用語法的返回類型(argtype,...)

int foo(int a, int b) { return a+b; } 
std::function<int(int,int)> p = foo; 

int bar(int a) { return ++a; } 
std::function<int(int)> q = bar; 

void boo() { return; } 
std::function<void()> r = boo;