Recientemente leí un código C ++ como este:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Nunca he visto ^() {}
ni ^{}
. ¿Qué quieren decir? ¿Algún tipo de función anónima?
^
seguro parece una macro, intente escanear a través de las#define
declaraciones. De hecho, puede ejecutargcc
con la-E
opción de expandir macros:g++ -E main.cpp
Respuestas:
Es difícil encontrar un duplicado con
^() {}
símbolos, así que publicaré una respuesta.Estos son "bloques", que es una extensión del compilador clang que crea cierres tipo lambda.
Más información en wiki y en clangs Especificación de idioma para bloques .
Cuando hay una lista de argumentos vacía,
(void)
se puede omitir,^ { recvData(data, NULL); }
es lo mismo que^ void (void) { recvData(data, NULL); }
.fuente