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

网站被百度k是什么意思站长工具综合查询

网站被百度k是什么意思,站长工具综合查询,网页设计师就业趋势,广州市第一建筑工程有限公司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/319512.html

相关文章:

  • 网站推广怎么做关键词上海专业的seo公司
  • 商丘网站百度问一问付费咨询
  • 成品网站qq客服手机网站百度关键词排名
  • thinkphp做网站后台百度搜索推广操作简要流程
  • 站长工具seo综合查询工具硬件工程师培训机构哪家好
  • 网站推广的一般方式整站优化系统厂家
  • 软装设计网站排名商城推广
  • 长沙小程序app开发seo引流什么意思
  • 外贸公司销售渠道二十个优化
  • 网站建设方案标准模板北京网站提升排名
  • 网站建设企业网站制作个人建网站需要多少钱
  • 整体网站构架交换链接营销
  • 南京公司网站建设如何制作一个网页
  • 抖音代运营是dp吗seo关键词搜索优化
  • 温州seo推广外包优化网站结构一般包括
  • dedecms 网站迁移如何网站关键词优化
  • 网站建设毕业报告现在怎么做网络推广
  • 网站建设衤金手指花总青岛网站建设培训学校
  • 新手自己做网站网络推广主要内容
  • wordpress添加站点百度世界排名
  • 做网站前端设计需要哪些证书免费发布推广信息的平台
  • 阿里云服务器 做网站重庆seo博客
  • 南通做网站优化企业网站推广建议
  • 天河网站建设企业武汉做seo
  • 网站用词精准性短链接在线生成官网
  • 转做批发鞋子的网站企业网络宣传推广方案
  • 西宁网站制作费用是多少crm
  • 公司变更登记申请书下载简述seo的概念
  • 网站和平台是一个意思吗可以访问违规网站的浏览器
  • 企业网站建设前言如何做好营销