問題總結:
目標:在一個執行緒中,在一個for回圈內,檢查每個陳述句的條件有效性,如果條件不成立,繼續/跳過;
我嘗試在每個陳述句之前添加 if 條件,但似乎不是最好的解決方案。有沒有辦法檢查每個陳述句的執行緒中的變數?(由于 Thread 將執行一個昂貴的函式,可能需要一段時間才能改變條件)
我正在尋找的預期結果應該比以下更好:
for(const auto& p : List)
{
if(!p.IsOk())
continue;
PerformAnExpensiveTask()//
if(!p.IsOk())// Is p still okay or deleted?
continue;
ShowText("Everything's fine");
PerformAnAnotherExpensiveTaskAgain();// This may take a second or more
if(!p.IsOk())// Is p still okay or deleted?
continue;
ShowText("Everything's fine");
}
我正在尋找更容易的東西,因為可能有很多運算式/陳述句沒有任何意義來檢查它們中的每一個是否有更好的條件。
uj5u.com熱心網友回復:
也許,試試“地圖功能”?鍵是狀態,值是函式物件。因此,只需在 for 回圈中呼叫狀態機:
map<STATE, FUNC> mfuncs{
{STAT1, func1},
{STAT2, func2},
{STAT3, func3},
};
for (const auto& p : List)
{
STATE state = START;
while(state != END && p.IsOk())
{
callState(state);
state = nextState(state);
}
}
uj5u.com熱心網友回復:
沒有這樣的方法可以完成這項任務。可以做一些事情來自動化它,但不值得,因為你的代碼會被搞砸。最好手動做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442906.html
