Ayer estaba pensando si sería posible usar la conveniencia de las funciones lambda C++ 0x para escribir devoluciones de llamada para las funciones API de Windows.¿C++ soportará 0x __stdcall o extern captura "C" -nada lambdas?
Por ejemplo, ¿qué ocurre si quiero utilizar una lambda como EnumChildProc
con EnumChildWindows
? Algo así como:
EnumChildWindows(hTrayWnd, CALLBACK [](HWND hWnd, LPARAM lParam) {
// ...
return static_cast<BOOL>(TRUE); // continue enumerating
}, reinterpret_cast<LPARAM>(&myData));
Otro uso sería escribir extern "C"
devoluciones de llamada para rutinas C. P. ej .:
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;
}));
¿Esto es posible?
Entiendo que las lambdas que capturan variables nunca serán compatibles con C, pero al menos me parece posible que capture-nothing lambdas puedan ser compatibles.
Esto se aclaró en un informe de defectos contra el estándar C++ 11, como explico en mi respuesta a continuación. –