如何使用C++模板变参实现Loki中的Length和TypeAt
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关如何使用C++模板变参实现Loki中的Length和TypeAt,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一,原Loki中的Leng
千家信息网最后更新 2026年11月03日如何使用C++模板变参实现Loki中的Length和TypeAt
这篇文章将为大家详细讲解有关如何使用C++模板变参实现Loki中的Length和TypeAt,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一,原Loki中的Length和TypeAt模拟实现如下
1,模板文件
#ifndef __SZYU_LOKI__#define __SZYU_LOKI__#include#include template class TypeList{public: typedef T Head; typedef U Tail;};class NullType;#define TYPELIST_1(type1) TypeList #define TYPELIST_2(type1, type2) TypeList #define TYPELIST_3(type1, type2, type3) TypeList /********************************************* Loki Length***********************************************/template class Length;template class Length >{public: enum { value = 1 + Length::value };};template <>class Length {public: enum { value = 0 };};/********************************************* Loki TypeAt***********************************************/template class TypeAt;template class TypeAt , index>{public: typedef typename TypeAt::Result Result;};template class TypeAt , 0>{public: typedef T Result;};#endif
2,测试用例
/********************************** ** Author : szyu** Date : 2017.1.7***************************************/#include "loki.h"voidtest1(){ std::cout << "Length..." << Length::value << std::endl; std::cout << "Length..." << Length::value << std::endl; std::cout << "Length..." << Length::value << std::endl; std::cout << "************************************" << std::endl; std::vector IntVector; std::cout << typeid(TypeAt), 0>::Result).name() << std::endl; std::cout << typeid(TypeAt), 1>::Result).name() << std::endl; std::cout << typeid(TypeAt), 2>::Result).name() << std::endl; TypeAt), 0>::Result var1; var1 = 10.10; TypeAt), 1>::Result var2; var2 = "abc"; TypeAt), 2>::Result var3; var3 = IntVector;}intmain( int argc, char *argv[] ){ test1(); return 0;} 3,执行结果如下:

二,使用C++11模板变参特性改进Length和TypeAt
在不使用模板变参会出现繁杂的TypeList嵌套问题,虽然使用宏定义能增加代码可读性,但是也因此需要定义大量的宏来支持。当出现几百个参数(极端)情况下,那需要定义几百个宏。显然比较麻烦。C++11提供了模板的变参的支持,故变参实现Length和TypeAt如下:
1,头文件
/********************************** ** Author : szyu** Date : 2017.1.6************************************/#ifndef __SZYU_LOKI__#define __SZYU_LOKI__#include#include /************************************* Loki length****************************************/template class Length{public: enum { value = 1 + Length ::value };};template class Length {public: enum { value = 1 };};/************************************* Loki TypeAt****************************************/template class TypeAt{public: typedef typename TypeAt ::Result Result;};template class TypeAt<1, T, Args...>{public: typedef T Result;};#endif
2,测试用例
/********************************** ** Author : szyu** Date : 2017.1.6************************************/#include "TypeList.h"voidtest1(){ std::cout << "Length..." << Length::value << std::endl; std::cout << "Length..." << Length::value << std::endl; std::cout << "Length..." << Length::value << std::endl; std::cout << "********************************" << std::endl; std::vector IntVector; std::cout << typeid(TypeAt<1, int, std::string, std::vector >::Result).name() << std::endl; std::cout << typeid(TypeAt<2, int, std::string, std::vector >::Result).name() << std::endl; std::cout << typeid(TypeAt<3, int, std::string, std::vector >::Result).name() << std::endl; TypeAt<1, int, std::string, std::vector >::Result var1; var1 = 10; TypeAt<2, int, std::string, std::vector >::Result var2; var2 = "ssss"; TypeAt<3, int, std::string, std::vector >::Result var3; var3 = IntVector;}intmain( int argc, char *argv[] ){ test1(); return 0;} 3,执行结果

TypeAt的实现中,由于变参要位于最后一个参数,故把位置参数移到了模板第一个参数。
关于"如何使用C++模板变参实现Loki中的Length和TypeAt"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
模板
参数
篇文章
C++
文件
更多
结果
支持
测试
不错
实用
繁杂
代码
内容
可读性
情况
把位
文章
极端
特性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网高科技
互联网属科技
互联网科技会
互联网金融 金融科技
狮子座互联网科技
互联网 的科技创新
广州互联网络科技有限公司
上游互联网科技
科技伦理 互联网公司
广州优美互联网科技
广州慧亚互联网科技怎么样
湖南诚度互联网科技有限公司
本届互联网博览会上的黑科技
威龙国际互联网科技公司
科技赋能视角下互联网保险发展
互联网科技包装股份有限公司上市
互联网科技新闻
湖北辰鑫科技互联网
互联网科技对化妆品行业
平安好医生打造互联网科技医疗
互联网科技工作委员会副主任毛军
深圳互联网科技公司
嘟嘟瓜互联网科技
上海亿帐通互联网科技
互联网科技博主是什么意思
阿里互联网科技公司
互联网科技公司实习生
洛阳共同富裕互联网科技有限公司
中国新注册互联网科技
高科技和互联网的现代国家