ユーザー定義型をサポートできるmin、 、maxなどの一連の関数を設計したいと考えています。stddev私が計画しているのは、ユーザーがExtractorこれらの関数にテンプレート引数を渡せるようにすることです。次のようないくつかのサンプル コード:
template <typename T>
struct DefaultExtractor
{
typedef T value_type;
static T value(T &v){
return v;
}
};
template <
typename Extractor=DefaultExtractor<typename std::iterator_traits<InputIterator>::value_type>, //error
typename InputIterator>
typename Extractor::value_type
foo(InputIterator first, InputIterator last)
{
return Extractor::value(*first);
}
これはコンパイルされず、エラー メッセージは "エラー: 'InputIterator' はこのスコープで宣言されていません" の行にありtypename Extractor=...ます。
Extractorテンプレートを前に置きたい理由InputIteratorは、ユーザーがfooカスタマイズされたを呼び出したいときExtractorに、 の型を明示的に指定する必要がないからですInputIterator。
コードをコンパイルするための解決策があり、同時にInputIteratorカスタマイズExtractorが必要な場合にユーザーがパラメーターを明示的に提供する必要がないかどうか疑問に思います。
コードは でコンパイルされg++-4.6.1 -std=c++0xます。