A'nın std::function
boş olup olmadığını nasıl doğru bir şekilde kontrol edeceğimi merak ediyordum . Şu örneği düşünün:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
Bu kod MSVC'de gayet iyi derlenir, ancak kodu doSomething()
başlatmadan ararsam eventFunc
açıkça çöker. Bu bekleniyordu ama merak ediyordum da değeri eventFunc
nedir? Hata ayıklayıcı diyor 'empty'
. Ben de bunu basit if ifadesini kullanarak düzelttim:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
Bu eserler ancak hala sigara başlatıldı değeri nedir merak ediyorum std::function
? Yazmak isterdim if (eventFunc != nullptr)
ama std::function
(belli ki) bir işaretçi değil.
Neden işe yarıyorsa saf? Arkasındaki sihir nedir? Ve bunu kontrol etmenin doğru yolu bu mu?
eventFunc
bir lambda olmadığını unutmayın ; bu birstd::function
. Lambdalarıstd::function
s olarak saklayabilirsiniz , ancak aynı şey değildirler.