Я работаю над книгой «Ускоренный С ++», и одно из упражнений требует, чтобы мы эмулировали «равную» функцию в заголовке, и до сих пор я реализовал простую версию, которая принимает три параметра следующим образом:Как реализована функция «равных» шаблонов? (предикатная версия)
template <class iterType1, class iterType2>
bool cequal(iterType1 begin, iterType1 end, iterType2 e){
while(begin != end){
if(!(*begin == *e))
return false;
++begin;
++e;
}
return true;
}
и вторая версия, которая может принять четвертый параметр ...
template <class iterType1, class iterType2, class boolPred>
bool cequal(iterType1 begin, iterType1 end, iterType2 e, boolPred pred){
while(begin != end){
if(!pred(*begin, *e))
return false;
++begin;
++e;
}
return true;
}
Мой вопрос, это идеальный способ сделать это? или эти две функции сходятся?
Проблема с 'equal_to' заключается в том, что он ожидает, что 2 операнда будут иметь один и тот же тип, тогда как его функция имеет 2 разных типа для своих операндов. – Blindy
@Blindy: Его функция имеет разные типы для итераторов, но это не означает, что типы элементов не будут одинаковыми. Я думаю, маловероятно, что вы захотите сравнить два разных типа в любом случае, и это вызовет ошибку, если вы попытаетесь. Я не вижу в этом проблемы. Если это то, что он хочет, он может, конечно, использовать другую функцию. –