A'nın std::functionboş 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 eventFuncaçıkça çöker. Bu bekleniyordu ama merak ediyordum da değeri eventFuncnedir? 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?
eventFuncbir lambda olmadığını unutmayın ; bu birstd::function. Lambdalarıstd::functions olarak saklayabilirsiniz , ancak aynı şey değildirler.