C++11:如何判断一个类是另一个模板类的子类?
时间:2022-06-22
本文章向大家介绍C++11:如何判断一个类是另一个模板类的子类?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50845588
我有一个模板类memory_cl<T>
,我需要判断另一个类是否为它的子类,怎么实现呢?
开始我问了度娘,在知乎上找到了答案 —>《如何判断一个类是否为一个模板类的实例?》
上面这个链接中给出了完整的答案:
struct is_kind_of_
{
template <template <class> class TM, class T> static std::true_type check(TM<T>);
template <template <class> class TM> static std::false_type check(...);
template <template <int> class TM, int N> static std::true_type check(TM<N>);
template <template <int> class TM> static std::false_type check(...);
};
#define is_kind_of(TM, ...) decltype(is_kind_of_::check<TM>(std::declval<__VA_ARGS__>()))
经过测试,确实是有效的,但是只是在gcc(我用的是5.2.0版本)编译器下有效, 但在VS2015下编译是不能通过的,VS2015虽然几乎支持了所有C++11的特性,但还有两三个特性没有支持,这其中就包括”表达式 SFINAE”,上面这个方法在VS2015下编译报错大概就是载在这个坑里了。
所以要想在VS2015下实现这个功能还得别想办法,于是参照上面的方法我把代码做了修改:
/* 模板函数,检查T是否为memory_cl的子类 */
template<typename T>
struct is_kind_of_memory_cl{
template <typename CL_TYPE>
static CL_TYPE check(memory_cl<CL_TYPE>);
static void check(...);
using cl_type=decltype(check(std::declval<T>()));// T实例化memory_cl时的模板参数类型
enum{value=!std::is_same<cl_type,void>::value};
};
问题解决。
关于VS2015对C++11的支持情况,参见微软的官方文档《支持 C++11/14/17 功能(现代 C++)》
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TextView中URL等指定特殊字符串与点击事件解析
- Android开发实现仿京东商品搜索选项卡弹窗功能
- Android开发中button按钮的使用及动态添加组件方法示例
- Kotlin开发的一些实用小技巧总结
- Android使用URLConnection提交请求的实现
- android原生JSON解析实例
- iOS新闻类App内容页技术探索
- Android仿iphone自定义滚动选择器
- Android仿iPhone日期时间选择器详解
- Android 仿余额宝数字跳动动画效果完整代码
- Android中判断listview是否滑动到顶部和底部的实现方法
- Android开发实现的简单媒体播放器功能示例
- Android中的颜色表示的详解
- android使用SoundPool播放音效的方法
- android中Context深入详解