我有以下代码:template<typename... Types>struct TupleSize;template<typename Head, typename... Tail>struct TupleSize<Head, Tail...>{ static const size_t value = sizeof(Head) + TupleSize<Tail...>::value;};template<> struct TupleSize<>{ static const size_t value = 0;};int main(){ //consuming_templates(); //template_functions(); //variadic(); TupleSize<>::value; TupleSize<int, double, char>::value; getchar(); return 0;}我不了解以下角色:template<typename... Types>struct TupleSize;实际上在哪里使用,因为我知道TupleSize ::value;返回0和另一段代码:template<typename Head, typename... Tail>struct TupleSize<Head, Tail...>{ static const size_t value = sizeof(Head) + TupleSize<Tail...>::value;};用于拆分参数包并递归计算值。这只是一个声明,如果是,为什么,如果不是,则在哪里使用它。我能想象的唯一情况是递归达到最终值,即变为TupleSize时。但是我不明白模板结构类型如何像这样存在,不应该这样:template<typename... Types>struct TupleSize<typename... Types>; (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 Is this just a declaration, if yes why, if not where is it being used.它是主模板的声明,采用任意模板参数。它有两个专业:永远不会使用主模板,因为当指定1个模板参数或多个模板参数大于1时,将选择第一个特化;如果不指定模板参数(空),则选择第二个特化。 (adsbygoogle = window.adsbygoogle || []).push({}); 09-05 06:50