2013-11-25 80 views
4

我想實現一個動態任務隊列,像這樣:檢查返回的std ::功能是「有效的」 C++ 11

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

// .. 

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

我如何能實現IsValidFunctionstd::function是否有一種默認值進行檢查?

+0

我不清楚是什麼使其有效。你的存在意味着什麼? – doctorlove

+0

http://en.cppreference.com/w/cpp/utility/functional/function/operator_bool – jrok

+1

它可能是'while(job)'你在找什麼? – PlasmaHH

回答

8

你可以簡單地檢查job爲bool:

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

這是一種速記的從gen()每循環一次分配job,停車時job計算結果爲假,依靠std::function<>::operator boolhttp://en.cppreference.com/w/cpp/utility/functional/function/operator_bool

+0

好東西。我已經知道[轉換運算符](http://stackoverflow.com/questions/1383606/conversion-operators-in-c),但我完全忘了它們!我想,[這個鏈接](http://stackoverflow.com/questions/4600295/what-is-the-meaning-of-operator-bool-const-in-c)更好地解釋了這個概念。 – Domi

+0

小心@Domi,在野外的'std :: function'的'bool'轉換有一些錯誤:http://stackoverflow.com/questions/19578237/strange-behavior-with-stdfunction – Yakk

1

您可以通過使用其conversion to bool來檢查函數是否具有有效目標。然後,無效函數將是沒有目標的空函數,例如,默認構建的或nullptr

相關問題