¿Cómo es posible acceder a los tipos de parámetros de una función lambda en C++? El siguiente no funciona:¿Cómo puedo acceder a los tipos de lambda en C++ 0x?
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; });
}
Lo anterior no se compila, porque el compilador elige el prototipo de plantilla en lugar de la especialización.
¿Hay alguna manera de hacer lo anterior?
Lo que en realidad estoy tratando de lograr es esto: tengo una lista de funciones y quiero seleccionar la función apropiada para invocar. Ejemplo:
template <class T, class ...F> void exec(T t, F... f...) {
//select the appropriate function from 'F' to invoke, based on match with T.
}
Por ejemplo, quiero invocar la función que toma 'int':
exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });
Voy a pedir una vista un poco más amplia: ¿Qué problema estás tratando de resolver con la función 'exec'? Suena un poco feo – GManNickG
Estoy tratando de hacer un tipo de unión algebraica. – axilmar
Resolución de sobrecarga en tipos de objetos de funciones arbitrarias ... No se me ocurre una manera de hacerlo. Si exportarían sus tipos de param, se puede hacer. De lo contrario, no tengo idea. –