检查在C ++ 11中返回的std :: function是否为“valid”

时间:2013-11-25 12:37:40

标签: c++ c++11 task-queue

我想实现一个动态任务队列,如下所示:

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

// ..

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

如何实施IsValidFunctionstd::function是否有一种默认值可以检查?

2 个答案:

答案 0 :(得分:9)

您只需将job视为布尔:

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

这是一种速记,每次从job分配gen()到循环,在job评估为假时停止,依赖于std::function<>::operator bool:{{3} }

答案 1 :(得分:1)

您可以使用conversion to bool检查函数是否具有有效目标。然后,无效函数将是没有目标的空函数,例如,默认构造的或nullptr