আমি ভাবছিলাম যে কীভাবে std::functionখালি আছে তা সঠিকভাবে চেক করব । এই উদাহরণ বিবেচনা করুন:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
এই কোডটি এমএসভিসিতে ঠিক জরিমানা সংকলন করেছে তবে আমি কোডটি doSomething()শুরু না eventFuncকরে কল করলে স্পষ্টতই ক্র্যাশ হয়। এটা প্রত্যাশিত কিন্তু আমি ভাবছিলাম এর মান কী eventFunc? ডিবাগার বলেছেন 'empty'। সুতরাং আমি স্থির করেছি যে সহজ যদি বিবৃতি ব্যবহার করে:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
এটি কাজ করে তবে আমি এখনও ভাবছি যে অ-আরম্ভ করার মান কী std::function? আমি লিখতে চাই if (eventFunc != nullptr)তবে std::functionপয়েন্টার নয় (স্পষ্টতই)।
শুদ্ধ কেন কাজ করে? এর পিছনে যাদু কী? এবং, এটি কীভাবে পরীক্ষা করা যায় এটি সঠিক উপায়?
eventFuncল্যাম্বদা নয়; এটি একটিstd::function। আপনি লম্বাডসগুলিতে সংরক্ষণ করতে পারেনstd::functionতবে তারা একই জিনিস নয়।