成像的類,它是做以下的事情避免C++類方法中的代碼重複?
class AClass
{
AClass() : mode(0) {}
void a()
{
if (mode != 0) throw ("Error mode should be 0");
// we pass the test, so now do something
...
mode = 1;
}
void b()
{
if (mode != 1) throw("Error mode should be 1");
// we pass the test, so now do something
...
}
int mode;
};
類包含許多方法(很容易超過20),以及這些方法,我們需要做的模式值檢查這顯然是一個個很多代碼重複。此外,我們可以確定兩種類型的方法,那些在模式!= 0時將拋出錯誤的方法,以及在模式!= 1時拋出錯誤的方法。可以以某種方式將這些方法分爲兩類(類別A =如果模式!= 0,則拋出一個錯誤的方法)以及如果模式!= 1拋出錯誤的方法的類別B)?
編輯:縱觀當前的答案,我意識到我制定問題的方式,問題可能不夠清楚。我想避免的是不得不在每個類的方法中調用一個函數。無論我們在方法的開始處編寫代碼還是將此代碼放入函數並調用此函數都不是問題。問題是我們是否可以一起避免這一切。是否有一種技術可以幫助根據某些上下文自動檢查對某個方法的調用是否有效。
AClass實際上是一個API在我的項目中。 a(),b()等是程序員可以調用的一些函數,如果他/她想要使用API,但其中一些方法只能按照某種精確的順序調用。例如,您可以在代碼中看到,一個()設置模式= 1,所以程序員可以做這樣的事情:
a(); // mode = 0 so it's good
b(); // mode = 1 so it's good
但是這個代碼需要故障(它會編譯過程,但在執行時我需要拋出一個錯誤提的是,其中b()被調用的情況下是錯誤的。
b(); // mode 0 so it won't work
a(); // it will compile but throw an exception
我想看看是否有任何模式可以工作,這樣做的,但不能在所有發現任何東西。它似乎是不可能的對我來說,我相信唯一的選擇就是編寫必要的代碼。任何人都可以提出一些建議嗎?非常感謝。
嘗試尋找Aspect Oriented Software Development http ://en.wikipedia.org/wiki/Aspect-oriented_software_development – imreal
您可以將錯誤引發代碼放入一個特殊的函數中,該函數將接受方法名稱和模式作爲參數來執行右引號。然後你可以在方法的開頭調用這個函數。 –