我是靠谱客的博主 寂寞超短裙,这篇文章主要介绍确定class类型,现在分享给大家,希望可以做个参考。

功能:确定某个类型是否是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类型内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部