我想保持我的代碼模塊化。目前,我有我的代碼設置將函數從子類傳遞給父類。但它根本不編譯。現在我想擺脫所有傳遞函數,但保持「模塊化」。保持C++模塊化而不通過類之間的函數
更新:我添加了更多關於我的代碼在做什麼的信息。我仍然排除了我正在做的大部分工作。班級分子正在優化班級的多個實例。 Class Rates正在優化費率內單個函數生成的多個值。
Class Data_Analysis {
virtual double find_rms_A (vector<double>) = 0;
virtual double find_rms_B (vector<double>) = 0;
virtual double find_rms_C (vector<double>) = 0;
double E (double (Data_Analysis::*fxn(vector<double>)) {
// doing tons of stuff
(this->*fxn)(vec);
//Simplex is third party library that requires a function that
// takes vector<double> and outputs a double
//http://www.codeguru.com/cpp/article.php/c17505/Simplex-Optimization-Algorithm-and-Implemetation-in-C-Programming.htm
Simplex((this->*fxn)(vec));
}
};
Class Molecule: Data_Analysis {
virtual double find_rms_A (vector<double>) {
// using variables only declared in Molecule
double rms = 0.0
for (int data_point_A = 0; data_point_A < num_data_point_A; data_point_A++) {
Rates r(data_point_A);
r.run_simulation_v1();
rms += r.return_rate();
}
return rms;
}
virtual double find_rms_B (vector<double>) {
// using variables only declared in Molecule
double rms = 0.0
for (int data_point_B = 0; data_point_B < num_data_point_B; data_point_B++) {
//do stuff
rms += rate;
}
return rms;
}
void optimize_A() {
// set variables for type of optimization A
E(&Data_Analysis::find_rms_A);
}
void optimize_B() {
// // set variables for type of optimization B
E(&Data_Analysis::find_rms_B);
}
};
Class Rates: Data_Analysis {
virtual double find_rms_C (vector<double>) {
// using variables only declared in Rates
double rms = 0.0
for (int data_point_C = 0; data_point_C < num_data_point_C; data_point_C++) {
// run simulation that is completely different than anything used in Molecule
rms += rate;
}
return rms;
}
void optimize_C() {
// set variables for type of optimization C
E(&Data_Analysis::find_rms_C);
}
};
事情我試圖讓路過職能的工作:
Virtual Function 1,Virtual Function 2,Virtual Function 3: 「不能聲明變量 'R' 是抽象類型的 'CHILD2'」
Pointer Functions 1,Pointer Functions 2 :「不能轉換'雙(Child1 :: )(std :: vector)'到'Parent :: fxn {aka double()(std :: vector)}'在初始化中」(星號使斜體。 )
所以,我想重新組織我的代碼來繞過傳遞函數。但我不知道如何做到這一點,而不必擺脫'函數E'並重複函數A-D(又名破壞模塊性)中的代碼。任何提示/建議?
發佈一些真實的代碼,說明你在說什麼。 –
您能否詳細說明您正在嘗試實施的實際使用案例。因爲你的例子看起來太設計了。 – rustyx
這聽起來像一個XY問題。你想用這種奇怪的東西來實現什麼? –