C에서 템플릿 인수는 상수 표현식이어야 합니다. 이는 해당 값이 컴파일 타임에 알려져야 함을 의미합니다. 컴파일러는 이 컨텍스트에서 상수가 아닌 변수를 평가할 수 없습니다.
다음 코드를 고려하세요.
template
void modify(){}
상수가 아닌 변수를 템플릿 인수로 전달하려면 다음과 같이 작성할 수 있습니다.
for(int i = 0; i ();
}
그러나 컴파일러가 컴파일 타임에 i 값을 결정할 수 없기 때문에 오류가 발생합니다. 루프 본문은 i 값을 변경하여 여러 번 실행될 수 있습니다.
상수가 아닌 변수를 직접 전달하는 대신 템플릿 특수화를 사용하여 구현할 수 있습니다. 반복 호출:
#include
template
void modify() { std::cout "
void modify() { std::cout "
void modify() {
std::cout " ();
}
int main() {
modify();
}
컴파일 시 알 수 없는 값으로 수정을 호출하려면 템플릿 메타프로그래밍이라는 기술을 사용할 수 있습니다. 다음은 간단한 예입니다.
#include
template <:tuple>>
struct TupleSize;
template
struct TupleSize<:tuple>> {
static const int value = sizeof...(Args);
};
template
void callModify(int i) {
if constexpr (i ();
callModify(i 1);
}
}
int main() {
int n = 10;
callModify::value>(0);
}
이 예에서 callModify는 i에 대해 원하는 값 범위를 포함하는 튜플의 크기인 N 매개변수를 사용합니다. 이 함수는 재귀 메타 프로그램을 사용하여 지정된 크기 N까지 수정하는 호출을 생성합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3