Проверьте, верна ли возвращенная функция std::function в C++11

Я хочу реализовать динамическую очередь задач следующим образом:

typedef std::function<void(void)> Job;
typedef std::function<Job(void)> JobGenerator;

// ..

JobGenerator gen = ...;
auto job = gen(); 
while (IsValidFunction(job))
{
    job();
}

Как я могу реализовать IsValidFunction? Есть ли какое-то значение по умолчанию для std::function проверить против?

2 ответа

Решение

Вы можете просто проверить job как бул

while (auto job = gen())
{
    job();
}

Это своего рода сокращение, которое присваивает job от gen() каждый раз через цикл, останавливаясь, когда job оценивает как ложное, полагаясь на std::function<>::operator bool: http://en.cppreference.com/w/cpp/utility/functional/function/operator_bool

Вы можете просто проверить, имеет ли функция правильную цель, используя ее преобразование вbool, Тогда недействительные функции будут пустыми, у которых нет цели, например, созданные по умолчанию или nullptr,

Другие вопросы по тегам