ポインターになる可能性のある 2 つのイテレーターを受け入れる関数テンプレートが必要です。2 つの引数が random_access イテレータの場合、戻り値の型をオブジェクトにしたい
std::iterator<random_access_iterator_tag, ...>
タイプ
そうでなければ
std::iterator<bidirectional_iterator_tag, ...>
タイプ。
また、引数が双方向反復子でもポインターでもない場合、コードがコンパイルを拒否するようにします。Boostなどのサードパーティのライブラリに依存することはできません
ポインターだけでなく双方向イテレーターを受け入れるように、この関数の署名を手伝っていただけませんか。
私が考えることができる1つの部分的な解決策は次のとおりです
template<class T>
T foo( T iter1, T iter2) {
const T tmp1 = reverse_iterator<T>(iter1);
const T tmp2 = reverse_iterator<T>(iter2);
// do something
}
アイデアは、双方向でない場合、コンパイラはそこから reverse_iterator を構築させないということです。