模板递归不会停止
问题描述:
我想创建模板递归,它让我通过使用make_sequence < 4>创建序列< 0,1,2,3,4>但似乎递归并没有停止专业化,只是继续运行直到stackoverfolw。模板递归不会停止
#include <iostream>
#include <cstdio>
template <std::size_t... Indices>
struct sequence {};
template<std:: size_t N, std::size_t ... Indices>
struct make_sequenceAppend{
using type = typename make_sequenceAppend<N-1, N, Indices...>::type;
};
template<std:: size_t , std::size_t ... Indices>
struct make_sequenceAppend<0ul, Indices...>{
using type = typename sequence< Indices...>::type;
};
template <std::size_t N>
struct make_sequence{
using type = typename make_sequenceAppend<N-1, N>::type;
};
int main()
{
make_sequence<4>();
return 0;
}
答
您的专业化声明是错误的。它应该是:
template<std::size_t ... Indices>
struct make_sequenceAppend<0ul, Indices...>{
此外,sequence< Indices...>::type
不存在。你完全专业化大概应该是:
template<std::size_t ... Indices>
struct make_sequenceAppend<0ul, Indices...>{
using type = sequence< Indices...>;
};
还有你main()
缺少分号,但这是题外话...
> *警告:类模板部分特例包含不能推导出一个模板参数; (关于'template struct make_sequenceAppend ') –
Jarod42
请切换您的编译器警告 – P0W