programacion lambdas fisica expresiones ejemplos calculo c++ c++11 lambda digraphs

c++ - lambdas - lambda symbol



¿Qué significan<: y:> cuando declaramos un lambda? (1)

Esta pregunta ya tiene una respuesta aquí:

Me he topado con la siguiente sintaxis lambda, que no entiendo:

#include <iostream> template<typename Callback> void do_it(Callback callback) { callback(); } template<typename T> void p() { std::cout << __PRETTY_FUNCTION__ << std::endl; } int main() { auto a = <:&:> { }; p<decltype(a)>(); do_it(<:&:> { std::cout << "Hello" << std::endl; }); //this }

El programa anterior produce una salida:

void p() [with T = main()::__lambda0] Hello

¿Podría explicar qué significa <:&:> {/* ... */} ? ¿Es posible declarar de esta manera un lambda que toma un argumento?


<: y :> son digraphs . Se traducen a [ y ] respectivamente. Como tal, su código es equivalente a:

auto a = [&] { }; do_it([&] { std::cout << "Hello" << std::endl; });

Así que es solo un lambda que captura todo por referencia.

Para declarar un lambda que toma un argumento como este, simplemente agregue una lista de parámetros después del grupo de captura:

auto a = <:&:> (AType) { };

Si quieres que el que lea tu código te odie, puedes usar una mezcla de dígrafos y trigrafos siempre que sea posible:

auto a = <:&??)??<%>; // ^ same as [&]{}