Saya bertanya-tanya bagaimana cara memeriksa dengan benar apakah std::function
kosong. 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 eventFunc
kode 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?
eventFunc
itu bukanlah lambda; itu astd::function
. Anda dapat menyimpan lambda dalamstd::function
s, tetapi keduanya tidak sama.