Проверка, назначена ли 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;
}
}

6

Решение

Это ошибка в вашем std::function реализация (а также, видимо, в моем), стандарт говорит, что operator! должен возвращать true, если объект создан с нулевым указателем на функцию, см. [func.wrap.func] параграф 8. Оператор присваивания должен быть эквивалентен построению std::function с аргументом и обменять его, так operator! также должен вернуть true в этом случае.

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]