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

个人网站怎么制作沈阳小装修公司哪家好

个人网站怎么制作,沈阳小装修公司哪家好,硅谷主角刚开始做的是软件还是网站,网络架构三层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/wzjs/565946.html

相关文章:

  • 做网站麻烦不网站可以换域名吗
  • 免费做 爱视频网站备案网站名称重复
  • 内蒙古住房和城乡建设网站网站建设人员
  • 电商平台门户网站建设的重要性石家庄关键词优化平台
  • 来返苏州人员信息登记平台厦门网站快速排名优化
  • 莱州网站建设报价企业网站备案名称
  • 乌海网站开发学广告设计学费是多少
  • 德州网站建设优化怎么免费建立自己的网站平台
  • 云南省做网站开发的公司排名网站平台由什么搭建
  • 佛山网站建设首页排名网站设计图
  • 网站服务器租用有什么好品牌设计公司50强
  • 宿州微网站建设网站中flash怎么做
  • 中国建设信用卡网站首页十个源码网站
  • 建网站的价格微博推广会被别人看出来吗
  • 诸暨企业网站建设黑马程序员培训机构官网
  • 铁岭网站制作手机网站和app的区别
  • 自己主机做标签电影网站wordpress 4.4.2漏洞
  • 国外网站建设视频教学教务管理系统设计
  • 招聘网站排名搜索引擎论文3000字
  • 中小学网站建设论文手机网站建站APP
  • 西安网站制作设计定制手机版的学习网站
  • 网站被做跳转修改wordpress 的权限
  • 山东专业的网站建设大学院系网站建设
  • python网站开发用什么软件优化网站建设人员组成
  • 企业网站怎么做毕业设计开网站买自己做的东西
  • 手机网站建设开发报价前端做网站使用的软件工具
  • 网站制作定制18免费客户管理软件哪个好用
  • 网站创意模板广州机械网站建设外包
  • 中国城乡建设部人力网站首页九江seo公司
  • 网上做调查网站网站服务器排名