如何检查忽略模板参数的类型

How to check a type ignoring its template parameters

本文关键字:参数 类型 何检查 检查      更新时间:2023-10-16

如何在忽略模板参数的情况下确定类的类型?

所以对于一个完全指定的类型,如MyClass<param1, param2, ...>,我想检查它是否确实是一个MyClass类型?

typedef ClassName<param1, param2, ...> T;
//Now my program receives T which can be any arbitrary type
//and I want to have something like the following
//check_if_MyClassType<T>::value should be true
//check_if_MyClassType<int>::value should be false
//check_if_MyClassType<T>::value should be false if T is not a MyClass type e.g T = vector<int>
template <class T>
struct IsClassName { static const bool value = false; };
template <class param1, param2, ...>
struct IsClassName<ClassName<param1, param2, ...> > { static const bool value = true; };

我想这就是你要找的。

#include <iostream>
#include <vector>
template <typename T>
struct IsMyClassType { static const bool value = false; };
template <typename T> struct MyClass {};
template <typename T>
struct IsMyClassType<MyClass<T> > { static const bool value = true; };

测试上面的代码…

int main()
{
   std::cout << IsMyClassType<int>::value << std::endl;
   std::cout << IsMyClassType<MyClass<int> >::value << std::endl;
   std::cout << IsMyClassType<MyClass<float> >::value << std::endl;
   std::cout << IsMyClassType<MyClass<std::vector<float> > >::value << std::endl;
   return 0;
}
输出:

<>之前0111