cplusplus.com에서이 조각에, 예를 들어, 참조 :다른 템플릿 유형 인수를 사용하는 대신 iterator_traits를 템플릿 함수에서 사용하는 이유는 무엇입니까?
이template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& val)
{
typename iterator_traits<InputIterator>::difference_type ret = 0;
while (first!=last) {
if (*first == val)
++ret;
++first;
}
return ret;
}
질문은 왜 오히려 다른 템플릿 인수에 복용보다 이러한 맥락에서 iterator_traits
을 사용되어 다음과 같이 :
template <class InputIterator, class T, class DiffType>
DiffType count(InputIterator first, InputIterator last, const T& val)
{
DiffType ret = 0;
while (first!=last) {
if (*first == val)
++ret;
++first;
}
return ret;
}
꽤 넓 습니다만 반복기 특성과 일반적으로 구성원 유형과 같은 일반적인 특성은 적절한 규칙을 사용하여 잘 작동합니다. 규칙에 따라 "표준"특성을 사용하면 알고리즘과 데이터 구조가 표준 템플릿 라이브러리의 나머지 부분과 잘 연동되어보다 나은 메타 프로그래밍이 가능합니다. – AndyG
또 다른 템플릿 클래스 *를 정의 할 수는 있지만 한번만하면 다른 모든 알고리즘에 대해 다시 수행하고 싶지 않습니다. –
밀도가 높지만 생각하고있는 것을 보여줄 수 있습니까? 마지막 문장에서? – Quentin