मैं एक कक्षा बनाना चाहता हूं जहां क्लाइंट कक्षा के एक क्षेत्र के रूप में []() -> void {}
जैसे लैम्ब्डा अभिव्यक्ति को स्टोर कर सकता है, लेकिन मैं यह नहीं समझ सकता कि ऐसा कैसे करें। One answer suggested using decltype
, जिसकी मैंने सफलता नहीं की। यहां एक ideone source link है। नीचे दिए गए स्रोत और परिणाम है:मैं सी ++ 11 में कक्षा के क्षेत्र के रूप में लैम्ब्डा अभिव्यक्ति कैसे संग्रहीत कर सकता हूं?
#include <cstdio>
auto voidLambda = []()->void{};
class MyClass {
public:
decltype(voidLambda) t;
MyClass(decltype(voidLambda) t) {
this->t = t;
}
};
int main() {
MyClass([] {
printf("hi");
});
}
परिणाम:
prog.cpp: In constructor 'MyClass::MyClass(<lambda()>)':
prog.cpp:3:79: error: no matching function for call to '<lambda()>::__lambda0()'
prog.cpp:2:20: note: candidates are: <lambda()>::<lambda>(const<lambda()>&)
prog.cpp:2:20: note: <lambda()>::<lambda>(<lambda()>&&)
prog.cpp:3:88: error: no match for 'operator=' in '((MyClass*)this)->MyClass::t = t'
prog.cpp: In function 'int main()':
prog.cpp:5:27: error: no matching function for call to 'MyClass::MyClass(main()::<lambda()>)'
prog.cpp:3:48: note: candidates are: MyClass::MyClass(<lambda()>)
prog.cpp:3:14: note: MyClass::MyClass(const MyClass&)
किसी को भी ऐसा करने के तरीके पता है?
हर लैम्ब्डा अभिव्यक्ति यह अपनी अनूठी प्रकार है बनाता है। 'ऑटो ए = []() {} में; ऑटो बी = []() {}; '' ए 'और 'बी' एक ही प्रकार के नहीं हैं। – bames53
दुर्भाग्य से 'संरचना ए {ऑटो x = 0; }; 'अनुमति नहीं है। –