比方說,我有以下代碼:檢查函數被調用或不
// I'll be providing these 3
int a = 0;
void setA(){ a = 1000;}
void processA() { std::cout << a; }
// User will call them
int main(){
// setA(); // <-- Notify about this
processA();
return 0;
}
在這裏,我必須確保有人打電話processA()
之前調用setA()
。我想過2的方式來做到這一點:
- 呼叫
setA()
只是內部processA()
功能或只是轉儲setA()
裏面的內容processA()
- 保持一個布爾標誌,並在稍後的狀態檢查,以確保
setA()
一直叫
現在第一個方法是有道理的,但問題是setA()
功能將比processA()
叫早了很多,我不能做到這一點。第二種方式很好,但依賴於運行時間。
有沒有辦法在編譯時做這項工作,以便有消息/警告或編譯器警告是提醒用戶他/她在處理它之前沒有調用setA()
的最好方法。
@KerrekSB哪個問題?我以前沒有問過這個問題。 –
某種「一次」標誌似乎很合適。你可以在'setA()'中無條件地設置它,'processA()'可以檢查這個標誌並有條件地調用'setA()'。或者你可以從字面上使用['std :: call_once'](http://en.cppreference.com/w/cpp/thread/call_once)。 –
創建一個'A類',它在構造函數中初始化其成員。然後在該對象上調用'process'。 –