Шаблон & л; класс Iterator & gt; Итератор здесь предопределен или можно использовать любое имя?

Рассмотрим код:

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

Решение

Два абсолютно одинаковы, да. Имя Iterator просто делает понятным читателю вашего кода какие аргументы calc ожидает, что будет передан в то время как T не особенно освещает. В любом случае, имя параметра шаблона — это просто имя — оно не имеет никакого другого значения.


Предложение по концепциям C ++ (которое вы изначально пометили как свой вопрос, но не имеет к нему никакого отношения) позволит вам написать что-то более значимое:

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

Это повлияет на разрешение перегрузки calcтакой, что calc(1, 2) теперь бы даже не рассматривать эту функцию — вместо того, чтобы выдавать ошибку компиляции, когда вы делаете *a,

Но даже здесь T это просто имя, не более того.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]