Zastanawiam się, czy istnieje sposób sprawdzenia, czy wskaźnik funkcji przypisany do std::function
był nullptr
. Spodziewałem się, że operator-!
to zrobi, ale wydaje się, że działa tylko wtedy, gdy funkcja została przypisana coś typu nullptr_t
.Sprawdzanie, czy funkcja std :: jest przypisana do 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
Napisałem tę funkcję pomocnika, aby obejść to na teraz.
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
Masz na myśli "przypisany coś typu" nullptr_t "", prawda? Kiedy po raz pierwszy przeczytałem odpowiedzi, pomyślałem, że robisz rozróżnienie między inicjalizacją a przypisaniem, ale teraz widzę inaczej. –
Należy unikać nieprzenośnych bzdur takich jak '__cdecl' i' HWND' w przykładach, twoje pytanie nie zależy od niczego specyficznego dla systemu Windows, więc nie ma powodu, aby nie używać typu funkcji, takiego jak 'void()', który może być testowane przez każdego na dowolnej platformie. –
Usunąłem części specyficzne dla systemu Windows i zmienię je na "typ nullptr_t" –