2014-09-01 3 views
0

Я следующий код:G ++ проблемы с станд :: функция

#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 :: функция неправильно

ответ

2

std::function<int(int)> для функции принимает int и возвращает int. например

int foo(int); 

std::function<void(int,int)> для функции принимает два целых и возвращаемого значения. например

void foo(int, int); 
1

std::function принимает один аргумент шаблона - тип вызываемого объекта, который он обтекает. Итак, если вы хотите построить std::function, который возвращает тип Ret и принимает аргументы типов Arg1, Arg2,..., ArgN, вы должны написать std::function<Ret(Arg1, Arg2,..., ArgN)>.

(Обратите внимание, что эллипсы не были предназначены, чтобы указать расширение параметров пакета. - они просто используются в регулярном математическом смысле)

1

Как говорит составитель, станд :: функция принимает один аргумент шаблона.

Используйте синтаксис ReturnType (тип аргумента, ...)

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; 
Смежные вопросы