【发布时间】:2013-08-05 19:19:16
【问题描述】:
我想知道是否有任何方法可以检查您分配给std::function 的函数指针是否为nullptr。我期待 !-operator 能够做到这一点,但它似乎只在函数被分配了 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类型的东西”,对吗?当我第一次阅读答案时,我以为你在区分初始化和赋值,但现在我看到了。 -
请避免在示例中使用像
__cdecl和HWND这样的非便携式废话,您的问题不依赖于任何Windows 特定的东西,因此没有理由不使用诸如@ 之类的函数类型987654330@,任何人都可以在任何平台上测试。 -
我删除了 Windows 特定的部分,并将其更改为“type nullptr_t”
标签: c++ c++11 std std-function nullptr