Tôi muốn làm điều gì đó như thế này (bên trong một lớp):mảng tĩnh của các hàm lambda (C++)
static constexpr MyStruct ops[6] = {
{'+', [&] (double a, double b) { return a+b; } },
{'-', [&] (double a, double b) { return a-b; } },
...
};
đâu MyStruct
được định nghĩa là:
typedef double (*binOp)(double, double);
struct MyStruct {
char c;
binOp fn;
};
Tôi cũng đã cố gắng:
std::function <double(double,double)> fn;
để định nghĩa fn
, nhưng không may mắn.
Lỗi tôi nhận được cho trường hợp đầu tiên là "lỗi: trình khởi tạo trường không cố định" mà tôi không thực sự nhận được. Nếu tôi thử với std::function
nó trở nên tồi tệ hơn, vì nó nói: "không thể được khởi tạo bởi một biểu thức không liên tục khi được khai báo".
Tại sao hàm lambda không liên tục? Tui bỏ lỡ điều gì vậy?
Thay thế 'constexpr' với 'const'. – Nawaz
biểu thức lambda hiện tại có thể không xảy ra bên trong biểu thức không đổi, nhưng hạn chế đó có thể bị xóa cuối cùng: https://isocpp.org/files/papers/N4487.pdf – dyp