C++元编程的学习笔记

Posted songyuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++元编程的学习笔记相关的知识,希望对你有一定的参考价值。

1. C++元编程的标志性语法

  • template<>
  • typename
  • struct || class
  • using

2. Notes

A. 变长模板不能使用符号来整体表示

这个观点源于我们在写“使用模板实现大数加法的作业”时,使用模板类来实现数字序列相加,

template<unsigned int... RA, unsigned int... RB>
struct Add<Cont<RA...>, Cont<RB...>> 
    using A =  typename ReverseCont<Cont<RA...>>::type;
    using B =  typename ReverseCont<Cont<RB...>>::type;
    using result =  typename Add<A, B, Cont<>>::type;
    using cont =  typename ReverseCont<result>::type;
;

可以看到,这里Cont<RA...>Cont<RB...>的声明是重复的,于是我们想到能不能把这个变长模板整体用一个符号表示,也就是这样的代码:

template<Cont<unsigned int...> RA, Cont<unsigned int...> Cont RB>
struct Add<RA, RB> 
    using A =  typename ReverseCont<Cont<RA...>>::type;
    using B =  typename ReverseCont<Cont<RB...>>::type;
    using result =  typename Add<A, B, Cont<>>::type;
    using cont =  typename ReverseCont<result>::type;
;

不过试了一下,是无法通过编译的,所以在使用变长模板作为类型参数时,无法使用符号来对其整体表示,而需要使用折叠表达式的方式来编写。

以上是关于C++元编程的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

初识C++模板元编程(Template Mega Programming)

shell脚本编程学习笔记-整数二次元比较操作符

C++基础学习笔记

《C++多线程编程》学习笔记

C++学习笔记C++编程环境配置

c++游戏服务器编程学习笔记