versiones geeksforgeeks existentes c++ c++11 lambda syntactic-sugar

geeksforgeeks - ¿Hay alguna forma de acortar la firma lambda de C++ 11 en la declaración?



std::function (3)

Quiero acortar el siguiente tipo de lambdas:

[] (SomeVeryLongTemplateType<int, float, char, std::string>, AnotherLongType) {};

Dado que la única razón para este lambda es inicializar algún miembro de la clase std::function<...> : no captura nada, no tiene nombres de argumentos, no devuelve nada, no hace nada.

Si la operación de acortamiento se expresa como una función del número de argumentos en la firma, quiero que esta función tenga la complejidad O (1).

¿Hay una manera de hacerlo?


¡Parece que estás buscando un lambda vacío que no hace nada, por lo que tu objeto std::function siempre estará en estado llamable!

Si es así, use este que se puede reutilizar para cualquier número de parámetros :

static const struct empty_lambda_t //static and const applies to the object! { template<typename ...T> void operator()(T && ... ) const {} //does nothing }empty_lambda {}; //declare an object which is static and const

Y luego usarlo como:

std::function<void()> fun1 = empty_lambda; std::function<void(int,int)> fun2 = empty_lambda; std::function<void(whatever)> fun3 = empty_lambda;

Espero que ayude.


Estás buscando "lambdas polimórficas". No existen (todavía), entonces no.

Sin embargo, puede hacerlo más fácil con el uso adecuado de typedef s, por lo que no tiene que escribir todo el texto cada vez.


en C ++ 14 habrá "lambdas genéricas" que deberían simplificar los nombres de tipo largos en los parámetros, según tengo entendido:

auto lambda = [](auto x, auto y) {return x + y; };

aquí auto es como tipo de plantilla

http://en.wikipedia.org/wiki/C%2B%2B14#Generic_lambdas