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++元编程的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章