首页 > 返回函数的函数是怎么个形式?

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

书上说

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

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

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


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


  1. 一个指向函数的指针,如

    int (*p)(int, int);

    p 是一个指向函数的指针,这种函数有两个 int 类型的参数,返回 int。

  2. 可以用以下两种方式定义返回函数指针的函数。

    • 直接定义

      int (*foo(char c))(int, int);
    • 用typedef

      typedef int OP(int, int);
      OP* foo(char c);

      两种方式等价,第二种更容易看清楚。

    1. 返回的就是 指向函数的指针。

  3. 应用例子

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

【热门文章】
【热门文章】