"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 컴파일 타임에 인수를 알 수 없는 경우 템플릿 인수로 지속적인 평가를 달성하려면 어떻게 해야 합니까?

컴파일 타임에 인수를 알 수 없는 경우 템플릿 인수로 지속적인 평가를 달성하려면 어떻게 해야 합니까?

2024년 11월 20일에 게시됨
검색:653

How Can I Achieve Constant Evaluation with Template Arguments When the Argument Is Not Known at Compile Time?

템플릿 인수 상수 평가

1. 컴파일러가 컴파일 타임에 'i'를 평가할 수 없는 이유는 무엇입니까?

컴파일 타임 평가에서는 프로그램이 실행되기 전에 'i' 값을 알아야 합니다. 그러나 제공된 코드에서 'i'는 프로그램 실행 중에 변경되는 루프 변수입니다. 'i' 값은 동적으로 할당된 값이므로 컴파일러는 컴파일 타임에 'i' 값을 결정할 수 없습니다.

2. API 인터페이스를 수정하지 않고 목표를 달성할 수 있습니까?

예, 템플릿 특수화를 사용하여 템플릿 인수 범위를 반복하는 재귀 함수를 만들 수 있습니다. 예를 들어 다음과 같은 함수를 만들 수 있습니다.

template
void modify_recursive() {
    // Call modify with template argument 'i'
    modify();
    
    // Recursively call modify_recursive with the next template argument
    if (i ();
    }
}

상수가 아닌 인수로 'modify' 호출

컴파일 시간 상수가 아닌 값으로 'modify'를 호출하려면 다음을 사용할 수 있습니다. 템플릿 메타 프로그래밍이라는 기술. 한 가지 접근 방식은 함수 개체를 인수로 사용하고 원하는 값으로 호출하는 템플릿 클래스를 만드는 것입니다.

template
struct InvokeWithParam {
    InvokeWithParam(F f, int param) : f(f), param(param) {}
    
    void operator()() { f(param); }
    
    F f;
    int param;
};

그런 다음 InvokeWithParam의 인스턴스를 수정하기 위한 템플릿 인수로 전달할 수 있습니다.

int var = 5;
modify();

이것은 var 값으로 수정 함수를 호출합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3