[c++] 判断类下是否有某个指定类型及名称的字段
来源:互联网 发布:adele 25 知乎 编辑:程序博客网 时间:2024/06/17 13:31
#include "stdafx.h"
#include <xtr1common>
#include <string>
template<typename T, int _Index>
struct IndexedTWrap
{
typedef T type;
static T gettype();
enum{ Index = _Index };
};
struct _GetClass_HasMember
{
template<typename T, int(T::*)>
struct matcher;
template<typename T>
static IndexedTWrap<typename T, 1> _hasDefineType(matcher<T, &T::first>*);
template<typename T>
static IndexedTWrap<T /*默认值*/, 0> _hasDefineType(...);
};
template<typename T>
struct GetClass_TypeOrT //获取T::type类型
{
typedef decltype(_GetClass_HasMember::_hasDefineType<T>(0)) wraptype;
enum { value = wraptype::Index };
typedef typename wraptype::type type;
int view = value;
};
template<typename T, typename U>
struct matcher;
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d %s\n", GetClass_TypeOrT<int>::value, typeid(GetClass_TypeOrT<int>::type).name()); //0
printf("%d %s\n", GetClass_TypeOrT<IndexedTWrap<int, 1>>::value, typeid(GetClass_TypeOrT<IndexedTWrap<int, 1>>::type).name()); //0
printf("%d %s\n", GetClass_TypeOrT<std::pair<int, int>>::value, typeid(GetClass_TypeOrT<std::pair<int, int>>::type).name()); //1
return 0;
}
仍然用了decltype,低版本的可以改成sizeof实现
- [c++] 判断类下是否有某个指定类型及名称的字段
- [c++11] 判断某类是否有某个原型及名称的成员函数
- 判断一个表中是否存在某个字段 及 判断数据库中是否有某个
- C++11模板:如何判断类中是否有指定名称的成员变量?
- [c++11] 判断 类内是否有指定名字的 字段/成员函数/静态函数/typedef
- [c++11] 判断类内是否有typedef某个名字的类型成员
- js中判断返回的json字符串中是否有某个字段
- 原生js判断某个元素是否有指定的class名的几种方法
- 自定义函数 判断oracle指定字段的值是否是数值类型
- 判断某个对象是否是某个类型的实例
- 判断是否有指定的进程名
- 判断是否有包含指定的class
- 判断是否有某个class
- 用jquery判断某个元素下是否有标签?
- 如何判断Oracle中某个字段的值是否重复
- Visual Basic 中判断指定名称的进程是否存在
- 查询表里是否有重复某个字段的数据
- 判断IP地址是否在某个指定的网段内
- ECSHOP去除配送方式
- window.print()打印网页局部内容
- Javascript继承机制的设计思想
- 黑马程序员---异常处理总结
- linux yum命令详解
- [c++] 判断类下是否有某个指定类型及名称的字段
- Win32 Windows编程 十
- NIVC->IPR[IPADDR]
- 怎么将excel转换pdf在线
- LeetCode OJ - Multiply Strings
- Wireshark基本介绍和学习TCP三次握手
- AndroidStudio关联自己下载的android source方法
- C++的函数重载
- 客户端ccb变量命名规范: