模板< class Iterator> Iterator是预定义的还是可以使用任何名称?

时间:2015-09-22 17:01:01

标签: c++ templates iterator

考虑代码:

template< class Iterator>
Iterator calc( Iterator a , Iterator b ){   
   if( *a == 'c' && a != b ) ++a ;
   return a ;
}

class Iterator是否重要,或者我们可以为其命名class T吗?

template< class T>
T calc( T a , T b ){
   if( *a == 'c' && a != b ) ++a ;
   return a ;
}

这两个例子是否相同?

1 个答案:

答案 0 :(得分:2)

两者完全一样,是的。名称Iterator只是让代码的读者更清楚地了解了calc期望传入的各种参数,而T并不特别有启发性。无论哪种方式,模板参数的名称只是一个名称 - 它没有其他含义。

C ++概念提案(您最初将问题标记为,但与问题严格无关)将允许您编写实际上更有意义的内容:

template <Input_iterator T>
T calc(T a, T b) { ... }

这会影响calc上的重载决策,这样calc(1, 2)现在甚至不会考虑此函数 - 而不是在执行*a时抛出编译错误。

但即使在这里,T只是一个名字,仅此而已。