当前位置: 首页 > 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/408012.html

相关文章:

  • 网站开发实训基本要求扬州seo推广
  • saas是不是做网站软文营销怎么写
  • 重庆网站建设解决方案网站关键词优化培训
  • 中石油第六建设公司网站网页在线客服免费版
  • 什么网站做h5好做做网站
  • 做网站现在可以挣钱吗企业营销策划书范文
  • 网站建设单页2024年阳性什么症状
  • 如何做网站代码数据分析师需要学哪些课程
  • 佛山市平台购物网站制作公司网络营销和传统营销的关系
  • 购物网站建设情况汇报seo优化或网站编辑
  • 泉州推广优化公司长沙seo袁飞
  • 网站logo怎么做动态惠州网站seo
  • 江西赣州深圳网站优化平台
  • 猫咪99永久找到回家的路昆明百度搜索排名优化
  • 工业设计网站外网百度识图网页入口
  • vue 做门户网站百度优化教程
  • 新闻app开发公司无锡seo网站管理
  • 动态网站开发加载图片优秀网站网页设计
  • 买了域名后怎么建立网址苏州网站seo服务
  • 最有前景的十大行业seo策略工具
  • 网站建设音乐插件怎么弄网站ip查询站长工具
  • 如何免费简单建一个网站苏州关键词优化怎样
  • 云主机费用seo排名的职位
  • 密云免费网站建设什么是网站推广?
  • 网站建设作品图片学技术的培训学校
  • 成品短视频app软件大全苹果版太原seo报价
  • 有什么专门搜试卷做的网站百度站长平台快速收录
  • 网上做问卷调查赚钱哪些网站好可口可乐软文范例
  • 网站设计公司 武汉快速排名优化怎么样
  • idc分销系统南阳网站优化公司