2016-08-12 3 views
-4

Я столкнулся с указателем функции C++ 11 с использованием метода std :: function. В результате сценарий отлично работает со старым методом указателя функции, но не с новой вещью.Использование std :: function for function return

#include <functional> 
using namespace std; 
function<int(int,int)> arithmeticFcn; 

int add(int x,int y) 
{ 
return x + y; 
} 

arithmeticFcn getOperation(char op) 
{ 
switch (op) { 
case '+': 
return add; 
break; 
default: 
return add; 
break; 
} 
} 

int main() 
{ 
int x = 10,y = 20; 
char op1; 
cin >> op1; 
arithmeticFcn Fcn = getOperation(op1); 
cout << Fcn(x,y) << endl; 
return 0; 
} 

Я делаю что-то неправильно?

+1

'arithmeticFcn' не называет тип. –

+0

'return; перерыв; '?! «Разрыв» никогда не достигается. –

+3

_ «Следующий сценарий [..] не работает с новой вещью». _ Это не приемлемое описание проблемы. –

ответ

2

Я собираюсь выйти на конечности и думаю, что вы ранее писали:

typedef int arithmeticFcn(int, int); 

и назвал это указатель на функцию.

Это не указатель на функцию. Это никогда не было указателем функции. Вы сделали arithmeticFcn функцией типа, вот как вы могли использовать его, как вы это делали выше.

Но здесь:

function<int(int,int)> arithmeticFcn; 

Вы не создаете тип. Вы создаете функтор, называемый arithmeticFcn.

Я полагаю, вы имели в виду:

typedef function<int(int,int)> arithmeticFcn;