Рассмотрим код:
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 ;
}
Оба эти примера одинаковы?
Два абсолютно одинаковы, да. Имя Iterator
просто делает понятным читателю вашего кода какие аргументы calc
ожидает, что будет передан в то время как T
не особенно освещает. В любом случае, имя параметра шаблона — это просто имя — оно не имеет никакого другого значения.
Предложение по концепциям C ++ (которое вы изначально пометили как свой вопрос, но не имеет к нему никакого отношения) позволит вам написать что-то более значимое:
template <Input_iterator T>
T calc(T a, T b) { ... }
Это повлияет на разрешение перегрузки calc
такой, что calc(1, 2)
теперь бы даже не рассматривать эту функцию — вместо того, чтобы выдавать ошибку компиляции, когда вы делаете *a
,
Но даже здесь T
это просто имя, не более того.
Других решений пока нет …