zoukankan      html  css  js  c++  java
  • 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);
    }

    http://blog.csdn.net/zhoudaxia/article/category/553198

  • 相关阅读:
    作业 20181030-3互评Alpha版本
    Alpha阶段事后诸葛亮会议记录
    Alpha发布用户使用报告
    20181023-2 贡献分配
    作业 20181016-1 Alpha阶段贡献分配规则
    Scrum立会报告+燃尽图(十月三十日总第二十一次)
    OC中时间函数的使用
    OC中的集合详解
    面向对象的概念详解(转)
    集中类
  • 原文地址:https://www.cnblogs.com/itdef/p/5596349.html
Copyright © 2011-2022 走看看