ユーザー定義型をサポートできる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
ます。