让我们在示例中看一个简单迭代器类型的定义。我们定义一个类模板,用来表示一段数值类型值,也可以生成指定范围的开始和结束迭代器。这个迭代器也是模板类型,两个模板都定义在同一个头文件 Numeric_Range.h 中。下面是 Numeric_Range<T> 模板的定义:
template <typename T> class Numeric_Iterator; // Template type declaration
// Defines a numeric range
template<typename T>
class Numeric_Range
{
static_assert(std::is_integral<T>::value || std::is_floating_point<T>::value,
"Numeric_Range type argument must be numeric.");
friend class Numeric_Iterator < T >;
protected:
T start; // First value in the range
T step; // Increment between successive values
size_t count; // Number of values in the range
public:
Numeric_Range(T first=0, T incr=1, size_t n=2) : start {first}, step {incr}, count {n}{}
// Return the begin iterator for the range
Numeric_Iterator<T> begin(){ return Numeric_Iterator<T>(*this); }
// Return the end iterator for the range
Numeric_Iterator<T> end()
{
Numeric_Iterator<T> end_iter(*this);
end_iter.value = start + count*step; // End iterator value is one step over the last
return end_iter;
}
};
类型参数 T 是序列的值类型,因此它必定是数值类型。对于模板主体中的函数 static_assert(),当 T 不是整型也不是浮点