书上说
函数可以直接返回一个可调用对象
可调用对象包括函数,函数指针等
所以函数可以直接返回一个函数。我怎么好像从来没见过?你们能举个例子给我看看吗?
还有函数返回lambda的例子
可调用对象主要包含函数指针、std::function和重载了元括号运算符的类/结构。
-
一个指向函数的指针,如
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); 相当。