템플릿 함수 선언에서 함수 이름 뒤의 두 번째 <>는 무엇입니까?

Johy

Stroustrup "A Tour of C ++"에서 그는 find_all의 예제를 다음과 같이 작성했습니다.

template<typename C, typename V>
vector<typename C::iterator> find_all(C& c, V v)
// find all occurrences of v in c
{
vector<typename C::iterator> res;
for (auto p = c.begin(); p!=c.end(); ++p)
if (∗p==v)
res.push_back(p);
return res;
}

무엇 typename C::iteratortemplate<typename C, typename V> vector<typename C::iterator> find_all? 나는 <>이 함수 이름 앞뒤에있는 것을 보지 못했습니다. 이 구조는 무엇이며 어떻게 표현됩니까? 책에서 그는 썼다

The typename is needed to inform the compiler that C’s iterator is supposed to be a type and not a
value of some type, say, the integer 7. We can hide this implementation detail by introducing a type
alias (§6.4.2) for Iterator:
template<typename T>
using Iterator = typename T::iterator;
// T’s iterator
template<typename C, typename V>
vector<Iterator<C>> find_all(C& c, V v)
// find all occurrences of v in c
{
...

그것은 일을 더 명확하게하지 않습니다. 나는 그것이 무엇인지 이해 using Iterator = typename T::iterator;하지만 두 번째 <> 사용법을 설명하지 않습니다.

일각수
template<typename C, typename V> //template declaration
vector<typename C::iterator> //return type (vector of iterators)
find_all //function name
(C& c, V v) //argument list

함수 find_allvector<typename C::iterator>, 또는 "C에 대한 반복자의 벡터"를 반환합니다 .

typename필요한 이유 는 다음 질문에 설명되어 있습니다. "typename"키워드가 규정 된 독립 이름 앞에가 아니라 규정 된 종속 이름 앞에 필요한 이유는 무엇입니까?


템플릿이없는 더 간단한 예 <>는 반환 유형 에서도 사용 합니다.

std::vector<int> generateNNumbers(std::size_t numberOfElements)
{
    std::vector<int> res;
    ...
    return res;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

템플릿의 각 함수 위에 템플릿을 선언해야하는 이유는 무엇입니까?

분류에서Dev

재귀 템플릿 함수의 첫 번째 호출에서 함수를 실행하는 방법은 무엇입니까?

분류에서Dev

장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

분류에서Dev

Javascript의 체인 함수에서 두 번째 함수를 먼저 실행하는 방법은 무엇입니까?

분류에서Dev

두 번째에서 함수의 첫 번째 인수를 참조하는 방법은 무엇입니까? (파이썬 2.7)

분류에서Dev

내 템플릿에서 재귀 함수가 한 번만 인쇄되는 이유는 무엇입니까?

분류에서Dev

템플릿 클래스의 이름을 템플릿 인수에 전달하는 방법은 무엇입니까?

분류에서Dev

멤버 함수에 두 템플릿이 모두 사용되는 클래스 템플릿 내의 멤버 함수에 대한 단일 템플릿 정의

분류에서Dev

부모 메서드에 대한 함수가 두 번 선언되는 이유는 무엇입니까?

분류에서Dev

파이썬에서 iter 함수에 대한 두 번째 인수는 무엇입니까?

분류에서Dev

함수를 호출하지 않는 템플릿 함수에 전달하기 위해 함수를 정의해야하는 이유는 무엇입니까?

분류에서Dev

C ++ 부분 개념 ID : 명시적인 템플릿 사양 순서 / 첫 번째 인수의 특수 상태에 대한 이유는 무엇입니까?

분류에서Dev

정방향 선언없이 함수 템플릿을 호출 할 수있는 이유는 무엇입니까?

분류에서Dev

이 함수가 두 번 선언 된 이유는 무엇입니까? 콜백 함수는 어디에 선언됩니까?

분류에서Dev

C ++에서 다음 클래스 또는 함수 선언에 나타나지 않는 템플릿 매개 변수의 사용은 무엇입니까?

분류에서Dev

C ++에서 두 번째 템플릿 오버로드를 사용하지 않는 이유는 무엇입니까?

분류에서Dev

가변 템플릿 매개 변수와 함께 struct를 사용하면 두 개의 템플릿 인스턴스가 동시에 생성되는 이유는 무엇입니까?

분류에서Dev

템플릿 커널 함수의 주소를 CUDA 함수에 전달하는 방법은 무엇입니까?

분류에서Dev

C에서 함수를 두 번 이상 선언하는 것이 의미가 있습니까?

분류에서Dev

함수 템플릿 : 기본 첫 번째 템플릿 인수를 두 번째로

분류에서Dev

clang이 템플릿에서 호출되기 전에 함수를 선언해야하는 이유는 무엇입니까?

분류에서Dev

템플릿을 다룰 때 함수 헤더와 본문에서 동일한 유형을 두 번 선언하는 것을 피하는 방법은 무엇입니까?

분류에서Dev

이 함수에 대한 템플릿 인수를 추론 할 수없는 이유는 무엇입니까?

분류에서Dev

node.js에서 함수에 대한 두 번째 호출이 첫 번째 것보다 훨씬 적은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

syslog에 두 개의 다른 함수 선언이있는 이유는 무엇입니까?

분류에서Dev

C ++에서 템플릿 함수가 부분 전문화를 가질 수없는 이유는 무엇입니까?

분류에서Dev

두 번째 수준에는 sequelize 사용이 포함됩니다.

분류에서Dev

두 개의 getline 함수를 함께 사용하고 두 번째는 \ n 문자를 사용하지 않는 이유는 무엇입니까?

분류에서Dev

Swift에서이 배열의 두 번째 레벨에 액세스 할 수없는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    템플릿의 각 함수 위에 템플릿을 선언해야하는 이유는 무엇입니까?

  2. 2

    재귀 템플릿 함수의 첫 번째 호출에서 함수를 실행하는 방법은 무엇입니까?

  3. 3

    장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

  4. 4

    Javascript의 체인 함수에서 두 번째 함수를 먼저 실행하는 방법은 무엇입니까?

  5. 5

    두 번째에서 함수의 첫 번째 인수를 참조하는 방법은 무엇입니까? (파이썬 2.7)

  6. 6

    내 템플릿에서 재귀 함수가 한 번만 인쇄되는 이유는 무엇입니까?

  7. 7

    템플릿 클래스의 이름을 템플릿 인수에 전달하는 방법은 무엇입니까?

  8. 8

    멤버 함수에 두 템플릿이 모두 사용되는 클래스 템플릿 내의 멤버 함수에 대한 단일 템플릿 정의

  9. 9

    부모 메서드에 대한 함수가 두 번 선언되는 이유는 무엇입니까?

  10. 10

    파이썬에서 iter 함수에 대한 두 번째 인수는 무엇입니까?

  11. 11

    함수를 호출하지 않는 템플릿 함수에 전달하기 위해 함수를 정의해야하는 이유는 무엇입니까?

  12. 12

    C ++ 부분 개념 ID : 명시적인 템플릿 사양 순서 / 첫 번째 인수의 특수 상태에 대한 이유는 무엇입니까?

  13. 13

    정방향 선언없이 함수 템플릿을 호출 할 수있는 이유는 무엇입니까?

  14. 14

    이 함수가 두 번 선언 된 이유는 무엇입니까? 콜백 함수는 어디에 선언됩니까?

  15. 15

    C ++에서 다음 클래스 또는 함수 선언에 나타나지 않는 템플릿 매개 변수의 사용은 무엇입니까?

  16. 16

    C ++에서 두 번째 템플릿 오버로드를 사용하지 않는 이유는 무엇입니까?

  17. 17

    가변 템플릿 매개 변수와 함께 struct를 사용하면 두 개의 템플릿 인스턴스가 동시에 생성되는 이유는 무엇입니까?

  18. 18

    템플릿 커널 함수의 주소를 CUDA 함수에 전달하는 방법은 무엇입니까?

  19. 19

    C에서 함수를 두 번 이상 선언하는 것이 의미가 있습니까?

  20. 20

    함수 템플릿 : 기본 첫 번째 템플릿 인수를 두 번째로

  21. 21

    clang이 템플릿에서 호출되기 전에 함수를 선언해야하는 이유는 무엇입니까?

  22. 22

    템플릿을 다룰 때 함수 헤더와 본문에서 동일한 유형을 두 번 선언하는 것을 피하는 방법은 무엇입니까?

  23. 23

    이 함수에 대한 템플릿 인수를 추론 할 수없는 이유는 무엇입니까?

  24. 24

    node.js에서 함수에 대한 두 번째 호출이 첫 번째 것보다 훨씬 적은 시간이 걸리는 이유는 무엇입니까?

  25. 25

    syslog에 두 개의 다른 함수 선언이있는 이유는 무엇입니까?

  26. 26

    C ++에서 템플릿 함수가 부분 전문화를 가질 수없는 이유는 무엇입니까?

  27. 27

    두 번째 수준에는 sequelize 사용이 포함됩니다.

  28. 28

    두 개의 getline 함수를 함께 사용하고 두 번째는 \ n 문자를 사용하지 않는 이유는 무엇입니까?

  29. 29

    Swift에서이 배열의 두 번째 레벨에 액세스 할 수없는 이유는 무엇입니까?

뜨겁다태그

보관