我想设计一组函数,比如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
.