मैं सोच रहा था कि अगर कोई std::function
खाली है तो ठीक से कैसे जांचा जाए। इस उदाहरण पर विचार करें:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
यह कोड MSVC में बस ठीक-ठाक संकलन करता है, लेकिन अगर मैं कोड doSomething()
को शुरू किए बिना कॉल करता हूं तो eventFunc
स्पष्ट रूप से क्रैश होता है। यह अपेक्षित है लेकिन मैं सोच रहा था कि इसका क्या मूल्य है eventFunc
? डिबगर कहता है 'empty'
। इसलिए मैंने तय किया कि यदि कथन का उपयोग सरल है:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
यह काम करता है लेकिन मैं अभी भी सोच रहा हूं कि गैर-आरंभिक मूल्य क्या है std::function
? मैं लिखना चाहूंगा if (eventFunc != nullptr)
लेकिन std::function
(जाहिर है) कोई सूचक नहीं है।
काम करने पर शुद्ध क्यों? इसके पीछे क्या जादू है? और, क्या यह सही तरीका है कि इसे कैसे जांचना है?
eventFunc
लैम्बडा नहीं है; यह एक हैstd::function
। आप lambdas कोstd::function
s में स्टोर कर सकते हैं , लेकिन वे एक ही चीज़ नहीं हैं।