この問題でコードの重複を排除したいと思います。
class PopulationMember
{
public:
vector<int> x_;
vector<int> y_;
}
class Population
{
vector<PopulationMember*> members_;
void doComputationforX_1(); // uses the attribute x_ of all members_
void doComputationforX_2();
void doComputationforX_3();
void doComputationforY_1(); // exactly same as doComputationforX_1, but
void doComputationforY_2(); // uses the attribute y_ of all members_
void doComputationforY_3();
EDIT: // there are also functions that use all the members_ simultaniously
double standardDeviationInX(); // computes the standard deviation of all the x_'s
double standardDeviationInY(); // computes the standard deviation of all the y_'s
}
二重性により、メソッドが 3 つではなく 6 つになりました。ペアワイズの類似性は非常に印象的であるため、「x_」を「y_」に置き換えるだけで、doComputationforX_1 から doComputationforY_1 の実装を取得できます。
私はこの方法で問題を作り直すことを考えました:
class PopulationMember
{
public:
vector<vector<int>> data_; // data[0] == x_ and data[1] == y_
}
しかし、この方法ではわかりにくくなります。
一般に、プリコンパイラ マクロが悪い解決策であることはわかっていますが、他に見当たりません。私の潜在意識はテンプレートを提案し続けていますが、それらをどのように使用できるかわかりません.