Mi chiedo se sia possibile verificare se un puntatore a una funzione assegnato a std::function
è un nullptr
. Mi aspettavo che il !
-operator lo facesse, ma sembra funzionare solo quando alla funzione è stato assegnato qualcosa di tipo nullptr_t
.Verifica se una funzione std :: è assegnata a un nullptr
typedef int (* initModuleProc)(int);
initModuleProc pProc = nullptr;
std::function<int (int)> m_pInit;
m_pInit = pProc;
std::cout << !pProc << std::endl; // True
std::cout << !m_pInit << std::endl; // False, even though it's clearly assigned a nullptr
m_pInit = nullptr;
std::cout << !m_pInit << std::endl; // True
Ho scritto questa funzione di supporto per aggirare questo per ora.
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
Significa "assegnato qualcosa di tipo' nullptr_t' ", giusto? Quando ho letto le risposte per la prima volta, ho pensato che stavi facendo una distinzione tra inizializzazione e assegnazione, ma ora vedo il contrario. –
Si prega di evitare crap non-portatile come '__cdecl' e' HWND' negli esempi, la tua domanda non si basa su nulla di specifico di Windows, quindi non c'è motivo di non usare un tipo di funzione come 'void()' che può essere testato da chiunque su qualsiasi piattaforma. –
Ho rimosso le parti specifiche di Windows e le ho modificate in "tipo nullptr_t" –