【发布时间】:2015-10-24 02:58:14
【问题描述】:
如何检查给定类型是否是特定类模板的特化?例如,给定
template <class T>
struct A {};
我如何检查CompareT 是否是A<*> 对于以下某些类型的*:
template<class CompareT>
void compare(){
// is this A ?
cout << is_same< A<*> , CompareT >::value; // A<*> ????
}
int main(){
compare< A<int> >();
}
例如,这里A<int> 应该匹配A<*> 并打印1。
【问题讨论】:
-
@quantdev 是的,但我需要适用于这种情况的 is_same :)
-
"这是 A 吗?" what 是 A 吗?你在比较什么?
-
也许你的意思是:类型
CompareT是类型模板A的实例吗?是否有一些X(任何X)的A<X>是CompareT? -
@AaronMcDaid(和 tower120)实例化模板意味着通过插入每个模板参数的参数来生成最终类型(specialization)。类型的实现是通过模式匹配它的“签名”来选择的,选择的可以是 explicit (如
std::vector<bool>)或 implicit (从第一个和最一般的声明)专业化。我们进一步区分 partial 和 full 显式特化,这取决于是否还有模板参数。