Domanda

Come è possibile accedere ai tipi dei parametri di una funzione lambda in C ++? Quanto segue non funziona:

template <class T> struct capture_lambda {
};

template <class R, class T> struct capture_lambda<R(T)> {
    static void exec() {
    }
};

template <class T> void test(T t) {
    capture_lambda<T>::exec();
}

int main() {
    test([](int i)->int{ return 0; });
}

È possibile che questo non si compila, perché il compilatore sceglie il prototipo del modello al posto della specializzazione.

C'è un modo per ottenere il risultato?

Quello che sto effettivamente cercando di raggiungere è questo: ho un elenco di funzioni e voglio selezionare la funzione appropriata per richiamare. Esempio:

template <class T, class ...F> void exec(T t, F... f...) {
    //select the appropriate function from 'F' to invoke, based on match with T.
}

Per esempio, voglio richiamare la funzione che prende 'int':

exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });
È stato utile?

Soluzione

Questo non è possibile, funzioni lambda sono zucchero sintattico per creare oggetti funzione non funzioni effettive. Ciò significa che il modello sta accettando una classe, e le classi non hanno il concetto di tipo di argomento .

Anche tenere a mente che un oggetto funzione generale può avere qualsiasi numero di operator()s sovraccarichi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top