> 백엔드 개발 > C++ > 본문

C 템플릿 함수를 사용하여 배열의 크기를 어떻게 얻을 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-21 14:40:11
원래의
139명이 탐색했습니다.

How Can I Get the Size of an Array Using a C   Template Function?

이 "배열 크기" 템플릿 함수는 어떻게 작동하나요?

이 템플릿 함수인 GetArrLength는 배열의 길이를 결정하도록 설계되었습니다. 이는 T 유형과 int 크기의 템플릿 매개변수로 각각 설정된 배열의 크기와 유형에 대한 지식을 활용하여 이를 달성합니다.

이 함수는 T 유형의 배열과 크기 크기에 대한 참조를 다음과 같이 사용합니다. 입력 매개변수. 이 참조는 T(&)[size] 구문을 사용하여 선언됩니다. 이는 매개변수가 일정한 크기의 T 유형 배열에 대한 참조여야 함을 나타냅니다.

호출되면 컴파일러는 다음을 시도합니다. 전달되는 배열의 유형과 크기를 기반으로 템플릿 매개 변수를 추론합니다. 예를 들어 크기가 10인 a라는 정수 배열로 GetArrLength를 호출하면 컴파일러는 T가 int이고 크기는 10이고 함수는 값 10을 반환합니다.

그러나 GetArrLength 함수 구현에는 특정 제한 사항이 있습니다. 첫째, 템플릿 매개변수와 반환 유형에 부호 있는 정수를 사용하면 음수 배열 크기 문제가 발생할 수 있습니다. 실제적인 목적에서는 예상치 못한 동작을 방지하기 위해 템플릿 매개변수와 반환 유형 모두에 std::size_t와 같은 부호 없는 유형을 사용하는 것이 좋습니다.

또한 함수의 결과는 상수 표현식이 아닙니다. , 배열의 크기는 본질적으로 일정하지만. 이러한 제한을 해결하기 위해 다음 코드 블록과 같이 일정한 결과를 제공할 수 있는 보다 강력한 솔루션이 존재합니다.

template <std::size_t N>
struct type_of_size
{
    typedef char type[N];
};

template <typename T, std::size_t Size>
typename type_of_size<Size>::type& sizeof_array_helper(T(&&)[Size]);

#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
로그인 후 복사

이 기술은 다음을 사용하여 배열의 크기를 유형의 크기로 인코딩하여 일정한 결과를 생성합니다. 템플릿 메타프로그래밍 접근 방식. 이는 결과가 동적으로 평가되지 않고 상수 표현식으로 유지되도록 보장합니다.

위 내용은 C 템플릿 함수를 사용하여 배열의 크기를 어떻게 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿