Li recentemente algum código C ++ como este:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Eu nunca vi ^() {}
nem ^{}
. O que eles querem dizer? Algum tipo de função anônima?
^
Se parece com uma macro, tente varrer as#define
instruções. Na verdade, você pode executargcc
com a-E
opção de expandir macros:g++ -E main.cpp
Respostas:
É difícil encontrar uma duplicata com
^() {}
símbolos, por isso vou postar uma resposta.Estes são "blocos", que são uma extensão do compilador clang que cria fechamentos do tipo lambda.
Mais informações no wiki e no clangs Especificação de idioma para blocos .
Quando há uma lista de argumentos vazia,
(void)
pode ser omitido, o^ { recvData(data, NULL); }
é o mesmo que^ void (void) { recvData(data, NULL); }
.fonte