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

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/itdef/p/5596349.html
Copyright © 2011-2022 走看看