c++ - 返回函数的函数是怎么个形式?

浏览:51日期:2023-06-03

问题描述

书上说

函数可以直接返回一个可调用对象

可调用对象包括函数,函数指针等

所以函数可以直接返回一个函数。我怎么好像从来没见过?你们能举个例子给我看看吗?还有函数返回lambda的例子

问题解答

回答1:

一个指向函数的指针,如

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); 相当。

回答2:

可调用对象主要包含函数指针、std::function和重载了元括号运算符的类/结构。

相关文章: