我想知道是否有任何方法来检查您分配到std::function
的函数指针是否为nullptr
。我期待!
操作员这样做,但它似乎只有在函数被分配了nullptr_t
类型的东西时才起作用。检查std ::函数是否分配给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
我写了这个帮助函数来解决这个问题。
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
你的意思是“分配了某种类型的'nullptr_t'”,对吧?当我第一次读到答案时,我认为你正在区分初始化和赋值,但是现在我看到了另外一种情况。 –
在示例中,请避免像'__cdecl'和'HWND'这样的非可移植垃圾,您的问题不依赖于任何特定于Windows的内容,所以没有理由不使用函数类型,如void()由任何平台上的任何人测试。 –
我删除了特定于Windows的部分,并将其更改为“type nullptr_t” –