2017-01-16 76 views
2

我想创建模板递归,它让我通过使用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; 
} 
+2

> *警告:类模板部分特例包含不能推导出一个模板参数; (关于'template struct make_sequenceAppend <0ul,Indices ...>') – Jarod42

+0

请切换您的编译器警告 – P0W

回答

5

您的专业化声明是错误的。它应该是:

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()缺少分号,但这是题外话...