检查std :: function是否已分配给nullptr

时间:2013-08-05 19:19:16

标签: c++ c++11 std std-function nullptr

我想知道是否有办法检查您分配到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;
    }
}

1 个答案:

答案 0 :(得分:8)

这是你的std::function实现中的一个错误(也显然在我的实现中),标准说如果使用null函数指针构造对象,operator!将返回true,请参阅[func.wrap] .func]第8段。赋值运算符应该等同于使用参数构造std::function并交换它,因此operator!在这种情况下也应该返回true。