2012-11-06 3 views
1

배열의 요소 수를 찾는 데 익숙한 방법을 배우고 있습니다. 배열의 길이를 배열로 전달하지 않고 정렬 알고리즘 작성을 시작할 수 있습니다. 매개 변수)하지만 튜토리얼에서,이 라인은 템플릿 선언으로 나타납니다여러 유형 이름을 가진 C++ 템플릿

template <typename T, size_t N> 

솔직히 당신이 하나 개의 템플릿 선언에 여러 typenames을 선언 할 수 몰랐지만 또한 "이 size_t N"은 무엇입니까? 이것도 템플릿 선언 내부의 변수 선언입니까?

+0

아니요 size_t는 size_t 유형의 정수 값을 사용하여 템플릿을 만드는 것을 의미합니다. 컴파일 타임 배열을 사용하는 경우 (보통 작은 N의 경우)이 방법이 도움이됩니다. 'typename T '는 T가 템플릿의 제네릭 형식에 대한 자리 표시 자임을 의미합니다. – linello

+0

size_t는 버퍼 크기 (바이트 수 또는 문자 수)와 같은 종류의 크기를 포함하는 데 사용되는 부호없는 유형입니다. –

+1

참고 : [std :: array'] (http://en.cppreference.com/w/cpp/container/array)와 ['std :: extent'] (http://en.cppreference.com/ cpp/types/extent). 이것들은 배열에있는 요소의 수와 함께 당신을 도울 것입니다. – dyp

답변

6

size_tunsigned int과 유사한 형식입니다. 템플릿 매개 변수를 사용하면 형식이 아닌 size_t을 전달한다는 의미입니다. N은 아마 부호없는 값인 배열의 크기를 나타냅니다. 예를 들어 : 예에서

template<typename T, size_t N> 
void zeroArray(T (&arr)[N]) { //arr is a reference to an array 
    std::fill(arr, arr + N, 0); //of N elements of type T 
} 

int main() { 
    int arr[3]; 
    zeroArray<int, 3>(arr); 
} 

, 나는 말했다 수 : 모두 템플릿 인수를 추론하는

zeroArray(arr); 

때문이다.

+0

좋은 설명, 고마워요 톤 – imkendal

+0

한 참고 사항 : C++ 11을 사용하는 경우'std :: begin'과'std :: end'는 배열에서 작동하므로'arr'과'arr + N '. C++ 03에서도 자신 만의 것을 만들 수 있습니다. – chris

+0

필자는 랩톱에서 기본 운영 체제로 페도라를 사용하고 있으며 솔직히 C++의 버전을 사용하고 있지는 않습니다.하지만이 질문을 게시 한 후 확인하는 방법은 Google에서 할 수 있습니다.나는 항상 가능한 모든 업데이트를 설치한다. C++ 라이브러리는 대부분의 리눅스 시스템에서 그렇게 업데이트된다. – imkendal

1

"size_t N"은 무엇을하나요? 이것도 템플릿 선언 내부의 변수 선언입니까?

그래, 기본적으로.

템플릿 인수는 정수 유형의 유형 또는 값일 수 있습니다. ... 어쨌든

이 그들이 할 수있는 몇 가지 다른 일들이 너무 ([C++11: 14.3.2/1] 참조), 그리고 내가 그 자체 "변수"그들에게 전화 않겠지 만, 값이 너무, 단지 유형과 같이 추론 할 수있다 , 그래서 :

template <typename T, size_t N> 
size_t array_size(const T (&)[N]) 
{ 
    return N; 
} 

int main() 
{ 
    int x[5]; 
    char y[10]; 
    std::string z[20]; 

    std::cout << array_size(x) << ',' << array_size(y) << ',' << array_size(z) << '\n'; 
} 

출력 : .

완벽하게 유효합니다.

+0

나는 그것을 변수 (prvalue)라고 부르지 않을 것입니다. 그리고 당신이 사용할 수있는 몇가지 타입이 더 있습니다. – dyp

+0

@DyP : 누가 그것을 변수라고 부릅니까? 그리고 그들은'[C++ 11 : 14.3.2/1]'에리스트되어 있습니다. 참조 용. –

+0

OP, 그리고 당신이 동의하는 것처럼 보일 수도 있습니다 ("이것은 변수 선언입니다"). – dyp

관련 문제