我发现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>();
}
我不明白为什么这个代码不工作。
任何想法?
该分支是一个运行时构造,编译器会高兴地实例化'out'这将继续...专业化的全部目的是终止实例。 –
Nim