Вчера я думал о том, можно ли использовать удобство функций С++ 0x лямбда для записи обратных вызовов для функций Windows API.
Например, что, если бы я хотел использовать лямбда как EnumChildProc
с EnumChildWindows
? Что-то вроде:
EnumChildWindows(hTrayWnd, CALLBACK [](HWND hWnd, LPARAM lParam) {
// ...
return static_cast<BOOL>(TRUE); // continue enumerating
}, reinterpret_cast<LPARAM>(&myData));
Другим вариантом было бы написать обратные вызовы extern "C"
для подпрограмм C. Например:.
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;
}));
Возможно ли это?
Я могу понять, что lambdas, которые захватывают переменные, никогда не будут совместимы с C, но мне кажется, что мне кажется, что ящики lambdas не могут быть совместимы.