나는 interesting question을 찾았고, 맨 위로 대답을 자세히 조사하기로 결정했다. 이 구조를 필요로하고 그것없이 코드를 재 작성하려고하는 이유
는 나 자신에게 물었다 :왜이 C++ 재귀 템플릿이 작동하지 않았습니까?
#include <iostream>
template <int N> void out(std::ostream& os) {
out<N-1>(os);
os << N << std::endl;
}
template <> void out<1>(std::ostream& os){
os << 1 << std::endl;
}
int main(){
out<100>(std::cout);
}
을 그리고 나서 코드를 리팩토링했습니다. 내가 이런 걸 가지고 :이 코드가 작동하지 않는 이유
#include <iostream>
template <int N> void out() {
if (N != 1) {
out<N-1>();
std::cout << N << std::endl;
}
else {
std::cout << 1 << std::endl;
}
}
int main(){
out<100>();
}
가 이해가 안가.
아이디어가 있으십니까?
브랜치가 런타임 구조이므로, 컴파일러는 행복하게''을 인스턴스화합니다 ... 전문화의 목적은 인스턴스화를 종료하는 것입니다. –
Nim