Eu queria saber como verificar corretamente se um std::functionestá 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 eventFunco 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?
eventFuncnão é um lambda; é umstd::function. Você pode armazenar lambdas emstd::functions, mas eles não são a mesma coisa.