これが私のコードの簡略版です:
template<typename TIterator>
TIterator findMaximalPosition(TIterator begin, TIterator end)
{
TIterator result(begin);
for (TIterator it = begin + 1; it != end; ++it)
{
if ((*it)->value > (*result)->value) // Here I just need to change to "<"
result = it; // to get a findMinimalPosition
}
return result;
}
template<typename TIterator>
TIterator findMinimalPosition(TIterator begin, TIterator end)
{
// almost the same
}
これは単純化された例です。<
私のコードは、または>
記号、または使用するかどうか++
を除いて、2つの関数が同じである場所でいっぱいです--
。
私の質問は:
コードのこの重複を減らす方法はありますか?
- 読みやすさを破壊する
- パフォーマンスを低下させますか?
テンプレートパラメータとして演算子(<
または)へのポインタを使用することを考えていました。>
ポインタはコンパイル時定数になるため、これによってパフォーマンスが低下することはありません。より良いまたは一般的に使用される方法はありますか?
編集:
だから私が答えに基づいてしたことは、実装することでした:
template <typename TIterator, typename TComparison>
TIterator findExtremalPosition(TIterator begin, TIterator end,
TComparison comparison);
次に、次のように呼び出します。
return findExtremalPosition(begin, end, std::less<double>());
と
return findExtremalPosition(begin, end, std::greater<double>());
これがあなたの意図したことだといいのですが。苦労した後、オペレーターのために同様の解決策を実行できると思い++
ます--
。