书上说
函数可以直接返回一个可调用对象
可调用对象包括函数,函数指针等
所以函数可以直接返回一个函数。我怎么好像从来没见过?你们能举个例子给我看看吗?
还有函数返回lambda的例子
高洛峰2017-04-17 13:00:41
一個指向函數的指針,如
int (*p)(int, int);
p 是指向函數的指針,這種函數有兩個 int 型別的參數,傳回 int。
可以用以下兩種方式定義傳回函數指標的函數。
直接定義
int (*foo(char c))(int, int);
用typedef
typedef int OP(int, int);
OP* foo(char c);
兩種方式等價,第二種比較容易看清楚。
回傳的就是 指向函數的指標。
應用範例
int foo_plus(int a, int b)
{
return a + b;
}
int foo_multiply(int a, int b)
{
return a * b;
}
typedef int OP(int, int);
OP* foo(char c)
{
OP* p;
switch(c) {
case 'p':
p = foo_plus;
break;
case 'm':
p = foo_multiply;
break;
default:
p = foo_multiply;
}
return p;
}
int main()
{
OP* f;
int n;
f = foo('p');
n = f(1, 2);
printf("%d", n); // 3
f = foo('m');
n = f(1, 2);
printf("%d", n); // 2
return 0;
}
補充:
函數傳回 一個對象,這個物件是可被呼叫的。
一個函數對象,即一個重載了括號運算子「()」的物件。
e.g.
class A{
public:
int operator()(int x, int y)
{
return x + y;
}
};
A a;
a(1, 2); 的效果跟上文 中的 foo_plus(1, 2); 相當。