遍历模板参数包,没有争论的专业化的作用是什么?
Traversing Template Parameter Packs, what is the role of the specialization which takes no argument?
我有以下一段代码:
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>;
这只是一个声明,如果是,为什么,如果不是在哪里使用它。
它是主模板的声明,采用任意模板参数。它有两个专业;从不使用主模板,因为当指定 1 个模板参数或多个模板参数超过 1 个时,将选择第一个专用化;如果未指定模板参数(空(,则选择第二个专用化。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 如何使用默认参数等选择模板专业化
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 未在作用域中声明unordered_map
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 模板化建造师专业化
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 循环在计数器中不起作用
- 有没有一种方法可以在编译时获得作用域类名
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- C++quit()函数中可能存在作用域问题
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 遍历模板参数包,没有争论的专业化的作用是什么?
- 为什么我的模板专业化不起作用