我想实现一个动态任务队列,如下所示:
typedef std::function<void(void)> Job;
typedef std::function<Job(void)> JobGenerator;
// ..
JobGenerator gen = ...;
auto job = gen();
while (IsValidFunction(job))
{
job();
}
如何实施IsValidFunction
? std::function
是否有一种默认值可以检查?
答案 0 :(得分:9)
您只需将job
视为布尔:
while (auto job = gen())
{
job();
}
这是一种速记,每次从job
分配gen()
到循环,在job
评估为假时停止,依赖于std::function<>::operator bool
:{{3} }
答案 1 :(得分:1)
您可以使用conversion to bool
检查函数是否具有有效目标。然后,无效函数将是没有目标的空函数,例如,默认构造的或nullptr
。