检查类里是否存在某种类型的几种方法,以检查xxx类型为例:
方法1:

template<class T>
class has_member_type_Type
{
struct big { char a[]; };
template<class C> static big probe(typename C::xxx*); // match here if type T::Type exists
template<class C> static char probe(...);
public:
static const bool value = sizeof(probe<T>(nullptr)) > ;
};

方法2:

template<typename T, typename = typename T::xxx>
static std::true_type has_xxx_impl(int); template<typename T>
static std::false_type has_xxx_impl(...); template<typename T>
struct has_xxx : decltype(has_xxx_impl<T>())
{
};

方法3:

template<typename... Ts> struct make_void { typedef void type; };
template<typename... Ts> using void_t = typename make_void<Ts...>::type; template<typename T, typename = void>
struct has_yyy : std::false_type
{
}; template<typename T>
struct has_yyy < T, void_t<typename T::xxx>> : std::true_type
{
}; //用宏简化
#define HAS_TYPE_MEMBER(MEMBER)\
template<typename T, typename = void>\
struct has_type_##MEMBER : std::false_type\
{\
};\
template<typename T>\
struct has_type_##MEMBER < T, void_t<typename T::MEMBER>>:\
std::true_type\
{\
}; HAS_TYPE_MEMBER(xxx)

测试代码:

struct MyStruct
{
typedef char xxx;
}; int main()
{
static_assert(has_xxx<MyStruct>::value, "no xxx");
static_assert(has_type_xxx<MyStruct>::value, "no xxx");
}

CHECK MEMBER TYPE的更多相关文章

  1. how to check SVG type in js

    how to check SVG type in js SVGSVGElement & SVGElement svg = document.querySelector(`svg`); // & ...

  2. check member function

    template<typename T> struct has_member_foo11 { private: template<typename U> static auto ...

  3. How To Check Member In Window VS With CplusPlus?

    实例说明 下面这个实例代码, 快速举例了在Win32应用程序下,对于内存的泄漏检查. 其中的原理,目前本人还是不太的理解. 只是记录了使用方法. 以后,看情况,会更新的. #ifdef _WIN32 ...

  4. 最新版自动检测卡片类型工具软件版本(auto check card type v3.2.0)

    自动检测卡片类型工具软件. 卡片放到读卡器上面自动识别卡片类型,不需老是按下按钮,好用,方便.支持自动识别NTAG213卡片,NTAG215卡片, NTAG216卡片,Ultralight芯片, Ul ...

  5. list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址

    #define list_entry(ptr, type, member) \ ((type *)(() -> member))) 解释: 1 在0这个地址看做有一个虚拟的type类型的变量,那 ...

  6. 对list_entry(ptr, type, member)的理解

    如何根据一个结构体成员的地址.结构体类型以及该结构体成员名获得该结构体的首地址? #define list_entry(ptr, type, member) \ ((type *)((char *)( ...

  7. reifiable type与raw type

    下面的逻辑需要明白如下两个概念: 4.7. Reifiable Types 4.8. Raw Types 举几个是Reifiable Types的例子,如下: class A{} class B< ...

  8. Welcome-to-Swift-18类型转换(Type Casting)

    类型转换是一种检查类实例的方式,并且哦或者也是让实例作为它的父类或者子类的一种方式. Type casting is a way to check the type of an instance, a ...

  9. [TypeScript] Generic Functions, class, Type Inference and Generics

    Generic Fucntion: For example we have a set of data and an function: interface HasName { name: strin ...

随机推荐

  1. 第八天:JS内置对象-Date日期对象

    1.Data对象 日期对象用于处理日期和时间 2.获取当日日期    代码如下: <!DOCTYPE html> <html lang="en"><h ...

  2. iOS中数字的格式化 NSNumberFormatter

    NSNumberFormatter 和NSDateFormatter 是NsFormatter的子类. NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值 ...

  3. WPF快速入门系列(3)——深入解析WPF事件机制

    一.引言 WPF除了创建了一个新的依赖属性系统之外,还用更高级的路由事件功能替换了普通的.NET事件. 路由事件是具有更强传播能力的事件——它可以在元素树上向上冒泡和向下隧道传播,并且沿着传播路径被事 ...

  4. 移动端浏览器隐私模式/无痕模式使用本地存储localStorage/sessionStorage的问题

    移动端浏览器隐私模式/无痕模式使用本地存储localStorage/sessionStorage的问题 开发H5 webapp时经常需要使用本地存储,如localStorage和sessionStor ...

  5. [自制简单操作系统] 1、从0-1到汇编再到c语言的奥秘

    目录: 1.用0-1编写最简单的操作系统 2.用汇编改写上面0-1程序 2.1 只用DB的汇编改写版  2.2 加入RESB汇编的改写版  2.3 进一步使用汇编替换0-1文件  2.4 核心程序也用 ...

  6. ubuntu安装redis

    1.下载安装root@21ebdf03a086:/# apt-cache search redisroot@21ebdf03a086:/# apt-get install redis-server a ...

  7. lucene字典实现原理

    http://www.cnblogs.com/LBSer/p/4119841.html 1 lucene字典 使用lucene进行查询不可避免都会使用到其提供的字典功能,即根据给定的term找到该te ...

  8. Redis安装与日常使用

    下载与安装 $ wget http://download.redis.io/releases/redis-3.0.3.tar.gz $ tar xzf redis-3.0.3.tar.gz $ cd ...

  9. Objective-C与C style语言的简单类比

    1. 关于Objc中函数调用类比 [_lblHelloWorld setHidden:![_lblHelloWorld isHidden]]; 类比为: _lblHelloWorld.setHidde ...

  10. TF Boys (TensorFlow Boys ) 养成记(六)

    圣诞节玩的有点嗨,差点忘记更新.祝大家昨天圣诞节快乐,再过几天元旦节快乐. 来继续学习,在/home/your_name/TensorFlow/cifar10/ 下新建文件夹cifar10_train ...