我想這樣做(一類中)靜態數組:lambda函數(C++)
static constexpr MyStruct ops[6] = {
{'+', [&] (double a, double b) { return a+b; } },
{'-', [&] (double a, double b) { return a-b; } },
...
};
凡MyStruct
定義爲:
typedef double (*binOp)(double, double);
struct MyStruct {
char c;
binOp fn;
};
我也嘗試:
std::function <double(double,double)> fn;
定義fn
,但沒有運氣。
我得到的第一個案例的錯誤是「錯誤:字段初始值設定項不是常量」我真的不明白。如果我嘗試使用std::function
,它會變得更糟,因爲它說:「聲明時不能用非常量表達式初始化」。
爲什麼lambda函數不是常量?我錯過了什麼嗎?
替換'和'const' constexpr'。 – Nawaz
lambda表達式當前可能不會出現在常量表達式中,但是最終可能會刪除該限制:https://isocpp.org/files/papers/N4487.pdf – dyp