⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typemap.h

📁 C++ patterns设计模式
💻 H
字号:
// 类型映射模板
// 注意:关于此处使用的技术,请参考《Modern C++ Design》(Andrei Alexandrescu)
// 本实现不支持VC6,如果你还使用VC6的话(真的?),请参考http://moderncppdesign.com/

#ifndef TYPEMAN_INC
#define TYPEMAN_INC

namespace stk
{
	////////////////////////////////////////////////////////////////////////////////
	// class template Int2Type
	// 将一个常数和一个类型建立对应关系
	// 模板参数v是一个常熟
	// 定义出来的类型可以通过“value”访问到原来的模板参数(常数)
	////////////////////////////////////////////////////////////////////////////////
    template <int v>
    struct Int2Type
    {
        static const int value = v;
    };

	////////////////////////////////////////////////////////////////////////////////
	// class template Type2Type
	// 将一种类型映射到另一种强类型
	// 模板参数给出要映射的类型
	// 通过“OriginalType”可以得到模板参数的类型
	////////////////////////////////////////////////////////////////////////////////

    template <typename T>
    struct Type2Type
    {
        typedef T OriginalType;
    };

	////////////////////////////////////////////////////////////////////////////////
	// class template Select
	// 从第一个模板参数的bool值选择两个类型中的一个
	// 访问“Result”可以得到最终被选择的类型
	// 当flag是true的时候,Result的类型是T
	// 当flag是false的时候,Result的类型是U
	////////////////////////////////////////////////////////////////////////////////
    template <bool flag, typename T, typename U>
    struct Select
    {
        typedef T Result;
    };
    template <typename T, typename U>
    struct Select<false, T, U>
    {
        typedef U Result;
    };

	////////////////////////////////////////////////////////////////////////////////
	// class template IsSameType
	// 比较两个类型是否是一致的
	// 访问“value”可以得到比较结果
	// 如果两个类型是一直的,那么value是true,否则是false;
	////////////////////////////////////////////////////////////////////////////////
    template <typename T, typename U>
    struct IsSameType
    {
        enum { value = false };
    };
    
    template <typename T>
    struct IsSameType<T,T>
    {
        enum { value = true };
    };

#endif // TYPEMAN_INC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -