搜尋

首頁  >  問答  >  主體

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

书上说

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

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

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

迷茫迷茫2805 天前629

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-17 13:00:41

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:00:41

    可呼叫物件主要包含函數指標、std::function和重載了元括號運算子的類別/結構。

    回覆
    0
  • 取消回覆