>백엔드 개발 >C++ >C에서 상수가 아닌 변수를 템플릿 인수로 전달할 수 없는 이유는 무엇입니까?

C에서 상수가 아닌 변수를 템플릿 인수로 전달할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 12:54:30668검색

Why Can't I Pass a Non-Constant Variable as a Template Argument in C  ?

템플릿 인수는 상수여야 합니다

C에서 템플릿 인수는 컴파일 중에 평가할 수 있는 상수 표현식이어야 합니다. 이렇게 하면 템플릿에 의해 생성된 코드가 컴파일 시간에 고정되고 최적화됩니다.

상수가 아닌 변수를 템플릿 인수로 전달할 수 없는 이유는 무엇입니까?

상수가 아닌 변수 i를 템플릿 인수로 전달하려고 할 때 오류가 발생하는 이유는 컴파일러가 컴파일 타임에 해당 값을 평가할 수 없기 때문입니다. i 값은 실행 중에만 알려지기 때문에 템플릿 전문화를 위한 매개 변수로 사용할 수 없습니다.

템플릿 인수를 반복하는 대체 솔루션

API 인터페이스를 변경하지 않고 목표를 달성하기 위한 한 가지 접근 방식은 템플릿 전문화를 활용하는 것입니다. 여기에는 다양한 템플릿 인수에 특화된 여러 오버로드된 함수를 만드는 것이 포함됩니다. 이 경우 수정, 수정, ..., 수정 등 개별 함수를 정의합니다. 다양한 인수 값을 처리합니다.

비상수 인수로 템플릿 함수 호출

귀하의 VAR과 같은 비상수 인수로 수정 ​​함수를 호출하려면 코드에서는 적절한 템플릿 전문화를 동적으로 생성하고 호출하는 전처리기 매크로나 도우미 함수를 사용할 수 있습니다. 그러나 이 접근 방식은 표준 C가 아니며 컴파일 시간 오류를 방지하려면 주의가 필요합니다.

템플릿 특수화의 예

다음은 템플릿 특수화를 사용하는 솔루션의 예입니다.

<code class="cpp">template<>
void modify<1>() { /* ... */ }

template<>
void modify<2>() { /* ... */ }

// ...

template<>
void modify<10>() { /* ... */ }</code>

위 내용은 C에서 상수가 아닌 변수를 템플릿 인수로 전달할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.