Проверьте, верна ли возвращенная функция 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
,