CHECK MEMBER TYPE
检查类里是否存在某种类型的几种方法,以检查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的更多相关文章
- how to check SVG type in js
how to check SVG type in js SVGSVGElement & SVGElement svg = document.querySelector(`svg`); // & ...
- check member function
template<typename T> struct has_member_foo11 { private: template<typename U> static auto ...
- How To Check Member In Window VS With CplusPlus?
实例说明 下面这个实例代码, 快速举例了在Win32应用程序下,对于内存的泄漏检查. 其中的原理,目前本人还是不太的理解. 只是记录了使用方法. 以后,看情况,会更新的. #ifdef _WIN32 ...
- 最新版自动检测卡片类型工具软件版本(auto check card type v3.2.0)
自动检测卡片类型工具软件. 卡片放到读卡器上面自动识别卡片类型,不需老是按下按钮,好用,方便.支持自动识别NTAG213卡片,NTAG215卡片, NTAG216卡片,Ultralight芯片, Ul ...
- list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址
#define list_entry(ptr, type, member) \ ((type *)(() -> member))) 解释: 1 在0这个地址看做有一个虚拟的type类型的变量,那 ...
- 对list_entry(ptr, type, member)的理解
如何根据一个结构体成员的地址.结构体类型以及该结构体成员名获得该结构体的首地址? #define list_entry(ptr, type, member) \ ((type *)((char *)( ...
- reifiable type与raw type
下面的逻辑需要明白如下两个概念: 4.7. Reifiable Types 4.8. Raw Types 举几个是Reifiable Types的例子,如下: class A{} class B< ...
- Welcome-to-Swift-18类型转换(Type Casting)
类型转换是一种检查类实例的方式,并且哦或者也是让实例作为它的父类或者子类的一种方式. Type casting is a way to check the type of an instance, a ...
- [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 ...
随机推荐
- elixir 高可用系列(三) GenEvent
概述 GenEvent 是事件处理的通用部分的抽象. 通过 GenEvent ,我们给已有的服务 动态 的添加 事件处理. GenEevent 和 GenServer 的区别 之前已经介绍了 GenS ...
- ( 转)基于.NET平台常用的框架整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...
- ASP.NET Core 1.0 中使用 Swagger 生成文档
github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...
- C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
前面三篇文章<C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)>.<C++11 并发指南六( <atomic> 类型详解二 std::at ...
- Failed to initialize the Common Language Runtime
今天在SQL Server 2008中执行存储过程的时候报以下错误: Msg , Level , State , Procedure usp_QueryRealTimeRoomInfo, Line F ...
- spring-mvc.xml报错cvc-complex-type.2.4.c
添加 <!-- 定义请求处理映射HandlerMapping --> <bean id = "handlerMapping" class = "org. ...
- paip java.net.SocketException No buffer space available的解决办法及总结
java.net.SocketException No buffer space available的解决办法及总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
- asp.net的JSON数据进行序列化和反序列化
先要引用在程序集 System.Web.Extensions.dll 的类库,在类中 using System.Web.Script.Serialization 命名空间. 1.定义一个强类型的类(m ...
- 详解Bootstrap导航组件
在bootstrap框架中将导航独立出来成为一个导航组件,根据不同的版本,可以找到相应的源码: LESS: navs.less SASS: _navs.scss 标签形导航,也称选项卡导航 标签形 ...
- 在线教程的游戏化-20分钟做了个demo
首先,不准说做得撇,因为其一,我只用了20分钟不到:其二,第一次尝试,以前想过,但是一直没有搞过,二话不说,先来截图,下载地址在最下面. 因为第一次尝试,所以很多事件自己还没有闹明白,不过基本上还是看 ...