私のコードを複製したくありませんが、1行を除いて同じことをする2つの関数があります。 プライベート関数を呼び出す別の関数が必要です。それはテンプレートであり、私の重複したコードの問題を解決します。C++ 2つの関数は同じ行を除いて同じです
double EuclideanDistance::calculateDistance(const Point &p1, const Point &p2) const
{
if (p1.getDimension()!=p2.getDimension())
return 0;
double sum = 0.0;
for(size_t i = 0; i < p1.getDimension(); i++)
{
sum += pow(p1[i] - p2[i], 2.0);
}
return sqrt(sum);
}
double EuclideanDistance::calculateWeightedDistance(const Point &p1, const Point &p2, const double *weights) const
{
if (p1.getDimension()!=p2.getDimension())
return 0;
double sum = 0.0;
for(size_t i = 0; i < p1.getDimension(); i++)
{
sum += pow(((p1[i] - p2[i])*weights[i]), 2.0);//here is the difference
}
return sqrt(sum);
}
あなたは何をお勧めしますか?
コードは、私には正常に見えます。統合しようとすると、最初のバージョンのパフォーマンスが低下します。 – rustyx
これは[codereview](http://codereview.stackexchange.com/)にもっと属しています。アイデアとして: 'weights'が' 1'であれば関数は同じです。あなたはおそらくそれを実現させる方法を見つけることができます。 – nwp
[コードレビュー](https://codereview.stackexchange.com/) – gsamaras