[英]Stuck with code using if statements
這可能是一個無稽之談,但我有點困惑,所以我想知道是否有人可以提供幫助。 我有以下代碼:
bool while_condition=false;
do{
if(/*condition*/){
//code
}
else if(/*condition*/){
//code
}
else if(/*condition*/){
//code
}
...//some more else if
else{
//code
}
check_for_do_while_loop(while_condition, /*other parameters*/);
}while(while_condition);
各種if
和else if
互相排斥,但if
在內部則彼此排斥; 如果滿足特定條件(無法在單個if語句中指定),則代碼返回一個值,並且do while
循環結束。 但是,如果在輸入了一個else if
,則不滿足內部條件的條件而沒有實際執行任何操作就退出了,而while循環將重新啟動整個過程。
我希望程序記住他輸入的位置,並避免代碼的那部分,即else if
輸入時沒有任何結果, else if
避免使用else if
特定的代碼,因此, else if
,他可以嘗試輸入else if
。 我曾考慮過將布爾值與這些語句相關聯,但是我不確定如何做到這一點。 有沒有一種方法可以讓我不必過多修改代碼結構?
為了提供一種避免變量加載的解決方法,這里概述了如何以數據驅動解決方案。
class TestItem
{
public:
typedef bool (*TestFuncDef)(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr);
TestItem(TestFuncDef test_fn_parm)
{
test_fn = test_fn_parm;
already_invoked = false;
}
bool Invoke(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr)
{
already_invoked = true;
return test_fn(state_to_test, result_ptr);
}
bool AlreadyInvoked() const {return already_invoked; }
private:
TestFuncDef test_fn;
bool already_invoked;
};
std::shared_ptr<result_type> RunTest(std::list<TestItem>& test_item_list, state_type& state_to_test)
{
for(;;) {
bool made_a_test = false;
for (TestItem& item : test_item_list) {
std::shared_ptr<result_type> result_ptr;
if (!item.AlreadyInvoked()) {
made_a_test = true;
if (item.Invoke(state_to_test, result_ptr)) {
return result_ptr;
}
else
continue;
}
}
if (!made_a_test)
throw appropriate_exception("No conditions were matched");
}
}
這不應該是您問題的完整解決方案,但可以提出另一種解決方案。
此處未記錄的重要步驟是建立要傳遞給RunTest的TestItems的std :: list。 這樣做的代碼可能看起來像這樣
std::list<TestItem> test_item_list;
test_item_list.push_back(TestItem(ConditionFn1));
test_item_list.push_back(TestItem(ConditionFn2));
ConditionFn1的定義可能類似於
bool ConditionFn1(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr)
{
// Do some work
if (....)
return false;
else {
result_ptr.reset(new result_type(some_args));
return true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.