功能:确定某个类型是否是class类型。
template<typename T>
class IsClassT
{
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(int C::*);
template<typename C> static Two test(...);
public:
enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
上面代码利用了一个知识点:即只有是class类型时,成员指针类型C::*才有效。
#include <iostream>
#include "IsClassT.hpp"
using namespace std;
class MyClass{};
struct MyStruct{};
union MyUnion{};
void func() {}
enum E{e1} e;
template<typename T>
void check()
{
if (IsClassT<T>::Yes)
{
cout << " IsClassT " << endl;
}
else
{
cout << " !IsClassT " << endl;
}
}
//check T param
template<typename T>
void checkT(T)
{
check<T>();
}
int main(int argc, char **argv)
{
cout << "int: ";
check<int>();
cout << "MyClass: ";
check<MyClass>();
cout << "MyStruct: ";
MyStruct s;
checkT(s);
cout << "MyUnion: ";
check<MyUnion>();
cout << "enum: ";
checkT(e);
cout << "function: ";
checkT(func);
return 0;
}
输出结果:
int: !IsClassT
MyClass: IsClassT
MyStruct: IsClassT
MyUnion: IsClassT
enum: !IsClassT
function: !IsClassT
最后
以上就是寂寞超短裙最近收集整理的关于确定class类型的全部内容,更多相关确定class类型内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复