Saya bertanya-tanya bagaimana cara memeriksa dengan benar apakah std::functionkosong. Pertimbangkan contoh ini:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
Kode ini dikompilasi dengan baik di MSVC tetapi jika saya memanggil doSomething()tanpa menginisialisasi eventFunckode tersebut jelas macet. Itu diharapkan tapi saya bertanya-tanya apa nilai dari itu eventFunc? Kata debugger 'empty'. Jadi saya memperbaikinya menggunakan pernyataan if sederhana:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
Ini berfungsi tetapi saya masih bertanya-tanya apa nilai non-inisialisasi std::function? Saya ingin menulis if (eventFunc != nullptr)tetapi std::function(jelas) bukan penunjuk.
Mengapa murni jika berhasil? Apa keajaiban di baliknya? Dan, apakah ini cara yang benar untuk memeriksanya?
eventFuncitu bukanlah lambda; itu astd::function. Anda dapat menyimpan lambda dalamstd::functions, tetapi keduanya tidak sama.