当前位置: 首页 > news >正文

手机如何做车载mp3下载网站互联网公司排名深信服

手机如何做车载mp3下载网站,互联网公司排名深信服,贵阳银行手机银行下载官方网站,画册设计印刷C 模板参数展开一、获取可变参数大小二、通过模版循环继承的方式来展开可变参数三、改用Using去实现循环继承一、获取可变参数大小 背景&#xff1a; FLen<int, char, long> Len; 我想要获取模板参数类型的总大小 template<typename T,typename ...ParamTypes> c…

C++ 模板参数展开

  • 一、获取可变参数大小
  • 二、通过模版循环继承的方式来展开可变参数
  • 三、改用Using去实现循环继承


一、获取可变参数大小

背景:
FLen<int, char, long> Len;
我想要获取模板参数类型的总大小

template<typename T,typename ...ParamTypes>
class FLen
{
public:enum{Number = FLen<T>::Number + FLen<ParamTypes...>::Number};
};template<typename Last>
class FLen<Last>
{
public:enum{Number = sizeof(Last)};
};

思想还是类似递归调用的思想,只是递归的不是函数而是模板

int main()
{FLen<int, char, long> Len;std::cout << Len.Number << std::endl;system("pause");return 0;
}

二、通过模版循环继承的方式来展开可变参数

最终目的是构建一个 TestIndex 类型,其模板参数是从0开始到N-1的整数序列。

template<int...>
struct TestIndex
{};template<int N,int...ParamTypes>
struct FSpawnIndex : FSpawnIndex<N - 1,N - 1,ParamTypes...>
{};template<int...ParamTypes>
struct FSpawnIndex<0,ParamTypes...>
{typedef TestIndex<ParamTypes...> Type;
};

解释一下原理和流程
起始:FSpawnIndex<3>(此时 N=3,参数包为空)
继承:FSpawnIndex<3> : FSpawnIndex<2,2>
在内部,参数包变为 2
下一步:FSpawnIndex<2,2> : FSpawnIndex<1,1,2>
参数包变为 1,2(注意:每次递归在参数包头部添加)
下一步:FSpawnIndex<1,1,2> : FSpawnIndex<0,0,1,2>
参数包变为 0,1,2
匹配终止条件:FSpawnIndex<0,0,1,2>
定义 Type 为 TestIndex<0,1,2>

int main()
{using TestType = FSpawnIndex<3>::Type;std::cout << typeid(TestType).name() << std::endl;system("pause");return 0;
}

三、改用Using去实现循环继承

template<int...>
struct TestIndex
{};template<int N,int...ParamTypes>
struct FSpawnIndex
{using Type = typename FSpawnIndex<N - 1, N - 1, ParamTypes...>::Type;//          ↑↑↑↑↑// 这个 typename 必不可少!
};template<int...ParamTypes>
struct FSpawnIndex<0, ParamTypes...>
{typedef TestIndex<ParamTypes...> Type;
};

在 C++ 模板元编程中,typename 关键字在这里起着​​关键作用​​,主要用于解决​​依赖名称的解析问题​​。

int main()
{using TestType = FSpawnIndex<3>::Type;std::cout << typeid(TestType).name() << std::endl;system("pause");return 0;
}

​​什么是依赖名称?​​
FSpawnIndex<N-1, …>::Type 是​​依赖于模板参数 N 和 ParamTypes… 的名称​​
编译器在解析模板时,无法确定 ::Type 是什么(可能是类型、静态成员或嵌套模板)

例如以下例子

// 情况分析:
struct FSpawnIndex</*...*/> {// 可能1:Type 是类型(typedef/using)typedef ... Type;// 可能2:Type 是静态成员static int Type;// 可能3:Type 是嵌套模板template<...> class Type;
};
http://www.dtcms.com/a/611537.html

相关文章:

  • 电商网站建设定制北京网站定制价格表
  • 水利网站建设管理汇报广告网站制作多少钱
  • 新建茶叶网站文章内容建设电子商务网站建设工资
  • SAP 如何恢复电子表格EXCEL导出允许选择格式
  • 瓦房店 网站建设二级域名怎么解析
  • 国外做化学申报的网站文化类网站是不是休闲娱乐类网站
  • 最新版LangChain 1.0快速入门介绍
  • 广州开发网站服务设计一个电商网站的首页
  • 单页网站开发网站开发初学
  • 怎样建公司网站有什么网站可以做宣传图片
  • 易缴缴:开启注册资金实缴无忧新时代
  • Java基础——数组1
  • 关于做公司网站成都企业管理培训课程
  • 新开传奇手游发布网站网站首页设计多少钱
  • 设计企业门户网站org是国外的网站吗
  • ACL 2025论文分享|一种同时支持文字、语音、草图、艺术图和低分辨率图等多模态内容检索的新框架Uni-Retrieval
  • 免费在线网站xp系统建设网站
  • 专利协会网站建设方案cpu占用超出网站空间的分配值
  • Kubernetes 证书以及证书续期、过期处理
  • 单页面竞价网站厦门湖里区建设局网站
  • YOLOv5 详细讲解文档
  • 计算机网络技术网站开发优化好的网站
  • 网站备案账号是什么石家庄微网站建设
  • 营销网站和展示型网站维护一个网站
  • 西安网站建设制作专业公司创建公司为什么必须三个人
  • 广安做网站公司海口网络公司网站建设
  • 第二部分(下):套接字
  • seo网站优化培训多少价格中国建设银行app官方下载
  • 临沂网站建设那家好建设网站需要专业
  • 软考~系统规划与管理师考试——真题篇——章节——第18章 智慧城市发展规划——纯享题目版