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
(분명히) 포인터가 아닙니다.
작동하는 경우 왜 순수합니까? 그 뒤에 숨겨진 마법은 무엇입니까? 그리고, 그것을 확인하는 올바른 방법입니까?
eventFunc
람다 아니다; 그것은std::function
.std::function
s에 람다를 저장할 수 있지만 동일한 것은 아닙니다.