Ich habe mich gefragt, wie ich richtig prüfen soll, ob ein std::function
leer ist. Betrachten Sie dieses Beispiel:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
Dieser Code wird in MSVC einwandfrei kompiliert, aber wenn ich doSomething()
ohne Initialisierung aufrufe, eventFunc
stürzt der Code offensichtlich ab. Das wird erwartet, aber ich habe mich gefragt, welchen Wert das hat eventFunc
. Der Debugger sagt 'empty'
. Also habe ich das mit einer einfachen if-Anweisung behoben:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
Das funktioniert, aber ich frage mich immer noch, welchen Wert nicht initialisiert hat std::function
. Ich würde gerne schreiben if (eventFunc != nullptr)
, std::function
ist aber (offensichtlich) kein Zeiger.
Warum funktioniert das reine wenn? Was ist die Magie dahinter? Und ist es die richtige Art, es zu überprüfen?
eventFunc
kein Lambda ist. es ist einstd::function
. Sie können Lambdas instd::function
s speichern , aber sie sind nicht dasselbe.