
typelist的实现
发布日期:2021-05-09 04:09:44
浏览次数:14
分类:博客文章
本文共 2096 字,大约阅读时间需要 6 分钟。
#include <stdio.h>
struct NullType;
template <typename T0 = NullType, typename T1 = NullType, typename T2 =NullType, typename T3 = NullType, typename T4 = NullType, typenameT5 = NullType> struct typelist { typedef T0 Head; typedeftypelist<T1, T2, T3, T4, T5> Tail; enum { length = 1 + Tail::length}; };
template <> struct typelist<NullType, NullType, NullType,NullType, NullType, NullType> { enum { length = 0 }; };
template <typename TL, int n, bool OutOfRange = (n >=TL::length)> struct type_at { typedef typenametype_at<typename TL::Tail, n-1>::type type; };
template <typename TL> struct type_at<TL, 0,false> { typedef typename TL::Head type; };
template <typename TL, int n> struct type_at<TL, n,true> { };
template <typename T, typename U> struct is_same_type { enum { value = false }; };
template <typename T> struct is_same_type<T, T> { enum { value = true }; };
template <typename TL, typename T, int count = -1, bool equalsHead= is_same_type<typename TL::Head, T>::value> structindex_of { enum { value = 1 + index_of<typename TL::Tail, T,count-1>::value }; };
template <typename TL, typename T, int count> structindex_of<TL, T, count, true> { enum { value = 0 }; };
template <typename T, typename U, int count> structindex_of<typelist<T>, U, count, false> { enum { value =count }; };
template <typename T, typename U, bool greaterThan = (sizeof(T) >=sizeof(U))> struct type_selector { typedef T type; };
template <typename T, typename U> struct type_selector<T, U,false> { typedef U type; };
template <typename TL> struct largest_type { typedeftypename type_selector<typename TL::Head, typenamelargest_type<typename TL::Tail>::type>::typetype; };
template <typename T> struct largest_type<typelist<T>> { typedef T type; };
int main() { typedef typelist<int, float, double, char>types; printf("%d\n", types::length); type_at<types,3>::type ch = 'c'; printf("%c\n", ch); printf("%d\n",index_of<types, unsigned>::value); printf("%d\n",index_of<types, double>::value); largest_type<types>::type d= 2.5; printf("%lf\n", d); printf("%d\n", index_of<types,largest_type<types>::type>::value); }
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月22日 23时01分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解
2019-03-06
深度学习一:深度前馈网络和反向传播
2019-03-06
在wxPython使ListCtrl占据整个窗口
2019-03-06
微软面试题
2019-03-06
Google新玩法(转载)
2019-03-06
C#中Dispose和Close的区别!
2019-03-06
如何让服务在流量暴增的情况下保持稳定输出
2019-03-06
一个20年技术老兵的 2020 年度技术总结
2019-03-06
一例完整的websocket实现群聊demo
2019-03-06
【Net】ABP框架学习之它并不那么好用
2019-03-06
Git 笔记
2019-03-06
Harbor 批量清理历史镜像
2019-03-06
使用Azure Functions玩转Serverless
2019-03-06
.NET Core 基于Websocket的在线聊天室
2019-03-06
使用MySQL Shell创建MGR
2019-03-06
win10新版wsl2使用指南
2019-03-06
spring-boot 使用hibernate validation对参数进行优雅的校验
2019-03-06
关于我
2019-03-06
数据结构实验之栈四:后缀式求值
2019-03-06
图结构练习——最小生成树(prim算法(普里姆))
2019-03-06