簡體   English   中英

如何在C++中創建一個匿名函數數組?

[英]How to create an array of anonymous functions in C++?

C++ 具有“lambdas”或匿名函數。 如果不捕獲,可以用它們代替 function 指針。 我還可以聲明一個 function 指針數組,如下所示:

double (*const Trig[])(double) = {sin, cos, tan};
cout << Trig[0](M_PI/2) << endl; // Prints 1

但是我想不出在全局數組初始值設定項中使用 C++ lamdas 代替 function 名稱的正確語法:

#include <iostream>
using namespace std;
static int (*const Func[])(int, int) = {
    [](int x, int y) -> int {
//   ^ error: expected expression
        return x+y;
    },
    [](int x, int y) -> int {
        return x-y;
    },
    [](int x, int y) -> int {
        return x*y;
    },
    [](int x, int y) -> int {
        return x/y;
    }
};
int main(void) {
    cout << Func[1](4, 6) << endl;
}

在 C++ 中初始化匿名函數指針數組的正確方法是什么?

代碼沒問題。 升級你的編譯器。

運行g++ --version的結果:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

使用g++ /Users/user/Lambda.cpp的編譯器錯誤:

/Users/user/Lambda.cpp:4:3: error: expected expression
        [](int x, int y) -> int {
         ^
1 error generated.

如何配置我的編譯器以接受此代碼?

代碼是正確的。 問題是由於在 C++11 中添加對 lambda 表達式的支持之前,編譯器默認使用舊版本 C++。

我所要做的就是告訴編譯器使用 C++11(或更新版本):

g++ /Users/user/Lambda.cpp --std=c++11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM