আমি ভাবছিলাম যে কীভাবে 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
তবে তারা একই জিনিস নয়।