std :: function的G ++问题

时间:2014-09-01 03:33:55

标签: c++ gcc c++11

我有以下代码:

#include <functional>

std::function<int,int> p;

int main()
{

return 0;
}

我使用的MinGW g ++ 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

3 个答案:

答案 0 :(得分:2)

std::function<int(int)> for function接受int并返回int。 e.g。

int foo(int);

std::function<void(int,int)> for function需要两个整数且没有返回值。 e.g。

void foo(int, int);

答案 1 :(得分:1)

std::function接受一个模板参数 - 它包含的可调用对象的类型。因此,如果您想构造一个std::function,它返回类型Ret并获取类型为Arg1, Arg2,..., ArgN的参数,那么您可以编写std::function<Ret(Arg1, Arg2,..., ArgN)>

(请注意,省略号并不表示参数包扩展 - 它们只是在常规数学意义上使用。)

答案 2 :(得分:1)

正如编译器所说,std :: function需要一个模板参数。

使用语法returntype(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;