mi piacerebbe fare qualcosa di simile (all'interno di una classe):array statico delle funzioni lambda (C++)
static constexpr MyStruct ops[6] = {
{'+', [&] (double a, double b) { return a+b; } },
{'-', [&] (double a, double b) { return a-b; } },
...
};
Dove MyStruct
è definito come:
typedef double (*binOp)(double, double);
struct MyStruct {
char c;
binOp fn;
};
Ho anche provato:
std::function <double(double,double)> fn;
per la definizione di fn
, ma senza fortuna.
L'errore che ottengo per il primo caso è "errore: l'inizializzatore del campo non è costante" che non ottengo realmente. Se provo con std::function
peggiora, dal momento che dice: "non può essere inizializzato da un'espressione non costante quando viene dichiarato".
Perché la funzione lambda non è costante? Mi sto perdendo qualcosa?
Sostituire 'constexpr' con' const'. – Nawaz
le espressioni lambda al momento potrebbero non verificarsi all'interno di espressioni costanti, ma tale restrizione potrebbe essere rimossa alla fine: https://isocpp.org/files/papers/N4487.pdf – dyp