這是一個簡單的問題,但我想就如何解決它提出建議。我有一個Policy
類與構造函數Policy::Policy(const int& mode)
。使用C++靜態類成員來控制所有類實例的「模式」
根據mode
的值,Policy
對象可以具有不同的行爲和特徵。例如,假設有3種可能的模式運行我的程序,對應於mode=1
,mode=2
和mode=3
。現在,在任何時候都不會有Policy
具有不同模式值的對象。
因此,對我來說有一個變量static int Policy::MODE
以便所有的Policy
對象知道它們應該在哪個模式下運行。創建的第一個Policy
對象將在其構造函數中設置此靜態類變量的值。然後,如果嘗試使用不同值值mode
創建任何其他Policy
對象,則實例化將退出且出現錯誤(因爲這不應該發生)。
有關如何解決此問題的任何建議?
[附加解釋響應下面添加評論請求。]
該程序是用於優化疾病篩選策略。每個Policy
對象代表一個篩選策略,並具有許多必要的功能,以便跟蹤反映在人羣中實施該策略的影響的統計數據。按照優化的說法,每個篩選策略是決策變量的向量,通過使用疾病的自然歷史模型模擬策略來估計目標函數。
Policy
對象需要能夠無縫地適應多個複雜的優化框架。它不僅需要能夠代表疾病篩查政策,還需要能夠代表任何數量的標準測試問題,可用於測試優化算法是否運行良好。根據Policy
類的MODE
值改變的特徵/特徵如下:(1)用於評估策略的模擬模型,(2)構造函數中用於設置諸如決策長度之類的事物的代碼變量向量,以及(3)用於顯示關於給定策略及其估計性能的信息的代碼。
對於任何特定的仿真模型(即目標函數),存在多個「策略表達式」(即決策變量的向量),其可以被解碼爲仿真模型所需的策略表達式。因此,每個「模式」代表一種表達篩選策略的方式與特定模擬模型的配對以評估該策略。
留出了很多不相關的東西,這裏將是類的結構,如果有隻是2個不同的運行模式:
class Policy {
public:
vector<double> x; // encoded representation of a policy (decision variables)
explicit Policy(const int& mode) {
// set Policy::MODE if not already set (code not shown)
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
void simulate() {
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
void displayInfo() {
switch(MODE) {
case 1:
// code...
break;
case 2:
// code...
break;
}
}
private:
static int MODE;
};
在高層次上,可以說,每一種模式值代表解決方案與估算器的配對。
設計聽起來是錯誤的。每個班級應該代表一件事情,這裏的「政策」代表3。你能詳細解釋爲什麼你這樣做嗎? –
似乎應該是'顯式的Policy :: Policy(const int&mode)' –
@AlexChamberlain我添加了我正在做的事情的解釋。告訴我你是否有更好的設計建議。謝謝! – synaptik