Ich habe kürzlich einen C ++ - Code wie diesen gelesen:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Ich habe noch nie gesehen ^() {}
noch ^{}
. Was meinen sie? Eine anonyme Funktion?
^
Sieht sicher aus wie ein Makro. Versuchen Sie,#define
Anweisungen zu durchsuchen . In der Tat können Siegcc
mit der-E
Option ausführen , um Makros zu erweitern:g++ -E main.cpp
Antworten:
Es ist schwer, ein Duplikat mit
^() {}
Symbolen zu finden , daher werde ich eine Antwort posten.Dies sind "Blöcke", eine Clang-Compiler-Erweiterung, die Lambda-ähnliche Verschlüsse erstellt.
Weitere Informationen im Wiki und in clangs Sprachspezifikation für Blöcke .
Wenn es eine leere Argumentliste gibt,
(void)
kann die weggelassen werden, die^ { recvData(data, NULL); }
ist die gleiche wie^ void (void) { recvData(data, NULL); }
.quelle