【发布时间】:2021-01-03 08:27:45
【问题描述】:
如何理解template<typename Tp> bool is_array<Tp[]> = true 是template<typename T> bool is_array<Tp> = true 的部分特化?
这里是相关的code snippet:
#include<iostream>
template<typename T>
bool is_array = false;
template<typename Tp>
bool is_array<Tp[]> = true;
int main()
{
std::cout << is_array<int> << std::endl;
std::cout << is_array<int[]> << std::endl;
}
我也注意到,一般来说,部分模板特化中的模板参数数量少于主模板中的模板参数数量。
部分专业化通常被视为this:
#include<iostream>
template<typename T, typename U>
class add
{
public:
add(T x, U y)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
};
template<typename U>
class add<int, U>
{
public:
add(int x, U y)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
};
int main()
{
add<int, double>(1, 5.0);
add<char, int>('a', 9);
}
【问题讨论】:
-
T是Tp[]的图像,如T = int[]。 -
我不确定你到底在问什么。你不清楚部分模板特化的规则吗?
-
@cigien 我有理由肯定约翰问为什么数组版本被认为是专业化的,即不选择 is_array = false;
-
@CaptainGiraffe 是的,对不起我的英语不好。我的问题是为什么数组版本被认为是专业化的。而且一般来说,部分模板特化中的模板参数的数量少于主要的。
-
我已经扩展了我的答案以解决有关模板参数数量的部分。
标签: c++ templates template-specialization