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

  • 相关阅读:
    实验二
    2
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客园作业05--树
    有向图强连通分量Tarjan算法
    nyoj 题目737 合并石子(一)
    nyoj 题目61 传纸条
    nyoj 题目49 开心的小明
  • 原文地址:https://www.cnblogs.com/itdef/p/5596349.html
Copyright © 2011-2022 走看看