C++ 模板专门化中的类型将继续计算?;

C++ 模板专门化中的类型将继续计算?;,c++,c++11,recursion,variadic-templates,C++,C++11,Recursion,Variadic Templates,就像这些代码一样,在模板专门化定义的类型中,将是类型(在标签1处),代码test\u two继续匹配模板专门化(struct test\u two),并计算test\u two的类型,依此类推 template<std::size_t N, std::size_t Max, typename T> struct test_two { }; template<std::size_t N, std::size_t Max> struct test_two<N,Max

就像这些代码一样,在模板专门化定义的类型中,将是类型(在标签1处),代码
test\u two
继续匹配模板专门化(
struct test\u two
),并计算
test\u two
的类型,依此类推

template<std::size_t N, std::size_t Max, typename T>
struct test_two
{

};

template<std::size_t N, std::size_t Max>
struct test_two<N,Max,std::size_t>
{
    using type = test_two<N+1, Max, std::size_t>  //label:1
}; 
模板
结构测试二
{
};
模板
结构测试二
{
使用type=test\u two//标签:1
}; 

如上所述,声明
使用type=test\u-two
不要求右侧类型完整,因此它不会实例化
test_two
的定义,只实例化其声明。因此没有无限递归。

@StackDanny真的没有必要。空包无法与部分专业化匹配,因此它将从主模板实例化。可能
使用type=typename test::type
?和
模板结构测试{using type=some_type;}
对于主版本?不,我只是想知道代码测试二是否继续匹配特定规范,并计算
测试二的类型,等等,即使我没有像
struct test二那样编写代码的结束条件,编译器也可以停止递归谢谢,但我使用了错误示例代码,我已经更新了示例代码,正如您所说,当我定义像test_two这样的代码时,test_two只会继续匹配模板规范化一次,即使我没有编写模板专门化的结束条件,那么编译器也会停止递归?@jackX我已经更新了答案,但是下次请试着把你的问题贴出来,这样你以后就不必从根本上改变它了。