arg1
2つの引数を取る関数が必要ですarg2
template<class T1, class T2>
SomeReturnType Foo(T1 arg1, T2 arg2);
引数は、ポインターまたは、std::iterator
random_access_iteratorの双方向イテレーターのいずれかです。Foo
それらのイテレータで何らかの操作を行い、イテレータを別のオブジェクトに返す必要がありますが、返されるイテレータは次のタイプです。
ptr, T -> iterator< iterator_traits<T>::iterator_category >
T, ptr -> iterator< iterator_traits<T>::iterator_category >
ptr, ptr -> iterator< random_access_iterator_tag >
random_access_iterator, random_access_iterator -> iterator< random_access_iterator_tag >
random_access_iterator, T -> iterator< iterator_traits<T>::iterator_category >
T, random_access_iterator -> iterator< iterator_traits<T>::iterator_category >
T, T -> iterator< bidirectional_iterator_tag> >
Foo
引数のiterator_category_tagsに基づいてヘルパー関数を呼び出し、関数のオーバーロードを使用してディスパッチを処理する予定です。しかし、の戻り型を計算する方法がわかりませんFoo
。
編集:私は今問題を見ています。の戻り型はFoo
std::iteratorから派生し、Foo
関数の引数にすることができます。私が使用しているトレイトクラスはこれらのリターンタイプに特化しておらず、リターンタイプの基本クラスのみに特化しているため、これは問題です。is derived_from
解決策はメタ関数を使用することだと思います。
EDIT2:タイトルは明らかに質問の内容を反映していません。これを他の人に役立つようにするために、私はより良いタイトルの提案を求めています。