Eu queria saber como verificar corretamente se um std::function
está vazio. Considere este exemplo:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
Este código compila perfeitamente no MSVC, mas se eu chamar doSomething()
sem inicializar eventFunc
o código obviamente falha. Isso é esperado, mas eu queria saber qual é o valor do eventFunc
? O depurador diz 'empty'
. Então, resolvi isso usando uma instrução if simples:
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
Isso funciona, mas ainda estou me perguntando qual é o valor de não inicializado std::function
? Eu gostaria de escrever, if (eventFunc != nullptr)
mas std::function
(obviamente) não é um indicador.
Por que o puro se funciona? Qual é a magia por trás disso? E é a maneira correta de verificar isso?
eventFunc
não é um lambda; é umstd::function
. Você pode armazenar lambdas emstd::function
s, mas eles não são a mesma coisa.