템플릿 인수 상수 평가
1. 컴파일러가 컴파일 타임에 'i'를 평가할 수 없는 이유는 무엇입니까?
컴파일 타임 평가에서는 프로그램이 실행되기 전에 'i' 값을 알아야 합니다. 그러나 제공된 코드에서 'i'는 프로그램 실행 중에 변경되는 루프 변수입니다. 'i' 값은 동적으로 할당된 값이므로 컴파일러는 컴파일 타임에 값을 결정할 수 없습니다.
2. API 인터페이스를 수정하지 않고도 목표를 달성할 수 있습니까?
예, 템플릿 특수화를 사용하여 템플릿 인수 범위를 반복하는 재귀 함수를 생성할 수 있습니다. 예를 들어, 다음과 같은 함수를 생성할 수 있습니다.
<code class="cpp">template<int i> void modify_recursive() { // Call modify with template argument 'i' modify<i>(); // Recursively call modify_recursive with the next template argument if (i < 10) { modify_recursive<i + 1>(); } }</code>
비상수 인수로 'modify' 호출
다음과 같은 값으로 'modify'를 호출하려면 컴파일 타임 상수가 아닌 경우 템플릿 메타 프로그래밍이라는 기술을 사용할 수 있습니다. 한 가지 접근 방식은 함수 개체를 인수로 사용하고 이를 원하는 값으로 호출하는 템플릿 클래스를 만드는 것입니다.
<code class="cpp">template<typename F> struct InvokeWithParam { InvokeWithParam(F f, int param) : f(f), param(param) {} void operator()() { f(param); } F f; int param; };</code>
그런 다음 InvokeWithParam의 인스턴스를 수정할 템플릿 인수로 전달할 수 있습니다.
<code class="cpp">int var = 5; modify<InvokeWithParam{modify, var}>();</code>
이렇게 하면 var 값으로 수정 함수가 호출됩니다.
위 내용은 컴파일 타임에 인수를 알 수 없는 경우 템플릿 인수로 지속적인 평가를 달성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!