我想知道有没有办法检查你分配给std::function
的函数指针是否为nullptr
。我原以为!
运算符可以做到,但它似乎只在将函数分配为nullptr_t
类型时才起作用。
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
我为了解决这个问题写了这个辅助函数。
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
nullptr_t
类型的东西”,对吧?当我第一次看到答案时,我以为你在区分初始化和赋值,但现在我看到不是这样。 - Ben Voigt__cdecl
和HWND
之类的非可移植代码,因为您的问题并不依赖于任何特定于Windows的内容,所以没有理由不使用函数类型,例如void()
,这可以在任何平台上被任何人测试。 - Jonathan Wakely