Ieri stavo pensando se sarebbe stato possibile utilizzare la comodità delle funzioni lambda C++ 0x per scrivere callback per le funzioni dell'API di Windows.Il C++ 0x supporterà __stdcall o extern "C" capture-nothing lambdas?
Ad esempio, cosa succede se volevo utilizzare una lambda come EnumChildProc
con EnumChildWindows
? Qualcosa di simile:
EnumChildWindows(hTrayWnd, CALLBACK [](HWND hWnd, LPARAM lParam) {
// ...
return static_cast<BOOL>(TRUE); // continue enumerating
}, reinterpret_cast<LPARAM>(&myData));
Un altro utilizzo potrebbe essere quello di scrivere extern "C"
callback per routine C. Es .:
my_class *pRes = static_cast<my_class*>(bsearch(&key, myClassObjectsArr, myClassObjectsArr_size, sizeof(my_class), extern "C" [](const void *pV1, const void *pV2) {
const my_class& o1 = *static_cast<const my_class*>(pV1);
const my_class& o2 = *static_cast<const my_class*>(pV2);
int res;
// ...
return res;
}));
È possibile?
Posso capire che lambda che cattura le variabili non sarà mai compatibile con C, ma almeno mi sembra possibile che capture-nothing lambda sia compatibile.
Questo è stato chiarito in un rapporto sui difetti rispetto allo standard C++ 11, come spiegherò nella mia risposta di seguito. –