📄 typemap.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 + -