遍历模板参数包,不带参数的特化有什么作用?
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; returns 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>;
Is this just a declaration, if yes why, if not where is it being used.
这是主模板的声明,采用任意模板参数。它有两个专业;从不使用主模板,因为当指定 1 个模板参数或多个模板参数大于 1 时,将选择第一个特化;如果未指定模板参数(空),则选择第二个特化。
我有如下一段代码:
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; returns 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>;
Is this just a declaration, if yes why, if not where is it being used.
这是主模板的声明,采用任意模板参数。它有两个专业;从不使用主模板,因为当指定 1 个模板参数或多个模板参数大于 1 时,将选择第一个特化;如果未指定模板参数(空),则选择第二个特化。