c++ template 判断是否为类类型

Posted itdef

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ template 判断是否为类类型相关的知识,希望对你有一定的参考价值。

/* The following code example is taken from the book
* "C++ Templates - The Complete Guide"
* by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
*
* (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
#include <iostream>

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(test<T>(0)) == 1 };
	enum { No = !Yes };
};


class MyClass {
};

struct MyStruct {
};

union MyUnion {
};

void myfunc()
{
}

enum E { e1 } e;

// check by passing type as template argument
template <typename T>
void check()
{
	if (IsClassT<T>::Yes) {
		std::cout << " IsClassT " << std::endl;
	}
	else {
		std::cout << " !IsClassT " << std::endl;
	}
}

// check by passing type as function call argument
template <typename T>
void checkT(T)
{
	check<T>();
}

int main()
{
	std::cout << "int:     ";
	check<int>();

	std::cout << "MyClass: ";
	check<MyClass>();

	std::cout << "MyStruct:";
	MyStruct s;
	checkT(s);

	std::cout << "MyUnion: ";
	check<MyUnion>();

	std::cout << "enum:    ";
	checkT(e);

	std::cout << "myfunc():";
	checkT(myfunc);
}

  

以上是关于c++ template 判断是否为类类型的主要内容,如果未能解决你的问题,请参考以下文章

C++ template<typename> 模板怎么用

以下代码片段 C++ 的说明

C++ 模板详解(转)

template相关

[c++] c++17 在编译期判断是否存在某个函数

为类类型 C++ 创建唯一 ID