Мне было интересно, как правильно проверить, является ли std::function
пустым. Рассмотрим этот пример:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
Этот код отлично компилируется в MSVC, но если я вызываю doSomething()
без инициализации eventFunc
, код явно сработает. Это ожидалось, но мне было интересно, что такое значение eventFunc
? Отладчик говорит 'empty'
. Поэтому я исправил это с помощью простого оператора if:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
Это работает, но мне все еще интересно, что такое значение неинициализированного std::function
? Я хотел бы написать if (eventFunc != nullptr)
, но std::function
(очевидно) не является указателем.
Почему чистый, если работает? Какая магия позади? И, правильно ли это проверить?