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

  • 相关阅读:
    vs2005设置断点不能调试问题(方法三为首选项,一般都可以解决)
    SQL中内连接和外连接的问题!
    javascript读写删cookie的简单方法
    数据库语句 select * from table where 1=1 的用法和作用
    gridview 和repeater 添加序号的方法
    asp.net Forms身份验证详解(转载)
    Asp.net中的认证与授权(转载)
    ASP.NET中前台javascript与后台代码调用
    android 模拟器不能上网解决方法
    大数据量系统架构
  • 原文地址:https://www.cnblogs.com/itdef/p/5596349.html
Copyright © 2011-2022 走看看