कल मैं इस बारे में सोच रहा था कि विंडोज एपीआई कार्यों के लिए कॉलबैक लिखने के लिए सी ++ 0x लैम्ब्डा फ़ंक्शंस की सुविधा का उपयोग करना संभव होगा या नहीं।क्या सी ++ 0x समर्थन __stdcall या बाहरी "सी" कैप्चर-कुछ भी नहीं है lambdas?
उदाहरण के लिए, अगर मैं EnumChildProc
के रूप में EnumChildWindows
के साथ लैम्ब्डा का उपयोग करना चाहता हूं तो क्या होगा? कुछ की तरह:
EnumChildWindows(hTrayWnd, CALLBACK [](HWND hWnd, LPARAM lParam) {
// ...
return static_cast<BOOL>(TRUE); // continue enumerating
}, reinterpret_cast<LPARAM>(&myData));
एक अन्य प्रयोग किया जाएगा सी दिनचर्या के लिए extern "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;
}));
क्या यह संभव है?
मैं समझ सकता हूं कि चरम पर कब्जा करने वाले लैम्ब्स कभी भी सी के साथ संगत नहीं होंगे, लेकिन कम से कम मुझे लगता है कि कैप्चर-कुछ नहीं लैम्बडा संगत हो सकता है।
यह सी ++ 11 मानक के खिलाफ एक दोष रिपोर्ट में स्पष्ट किया गया था, जैसा कि मैंने नीचे दिए गए मेरे उत्तर में बताया है। –