检查class是否为模板专门化
Check if class is a template specialization?
如何检查给定类型是否是特定类模板的专门化?例如,给定
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。
您可以提供要匹配的模板:
template <class T, template <class...> class Template>
struct is_specialization : std::false_type {};
template <template <class...> class Template, class... Args>
struct is_specialization<Template<Args...>, Template> : std::true_type {};
static_assert(is_specialization<std::vector<int>, std::vector>{}, "");
static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
CompareT
为类型,A
为模板。类同样不能是模板。类可以是模板的专门化,所以我假设这是您想要的。
部分专门化可以进行模式匹配:
template<class T>
struct is_an_A // Default case, no pattern match
: std::false_type {};
template<class T>
struct is_an_A< A< T > > // For types matching the pattern A<T>
: std::true_type {};
template< class CompareT >
void compare() {
std::cout << is_an_A< CompareT >::value;
}
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 是否可以对零模板参数进行模板专门化
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何基于模板化类的基类专门化成员函数
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 如何为指向复杂值的迭代器专门化算法?
- 专门化模板覆盖函数/避免对象切片
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- 我能否根据其运算符()的签名专门化可变参数模板参数
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- 检查class是否为模板专门化