C++模板元模板实战书籍讲解第一章(模板型模板参数与容器模板)

目录

前言

一、模板作为元函数的输入

二、模板作为元函数的输出

三、容器模板


前言

一个深度学习框架的初步实现为例,讨论如何在一个相对较大的项目中深入应用元编程,为系统优化提供更多的可能。

以下是本书的原文《C++模板元编程实战》,由李伟先生所著写。

百度网盘链接:

链接:https://pan.baidu.com/s/1e4QIRSDEfCR7_XK6-j-19w 
提取码:57GP

在 C++ 中,元函数(metaprogramming)可以操作的数据可以分为以下三类:

  1. 类型(type):元函数可以通过特殊的模板技术来操作不同的类型,例如提取类型信息、转换类型等。
  2. 值(value):元函数可以通过模板参数进行运算和计算,例如加法、乘法、判断等。这允许在编译时进行一些计算和决策。
  3. 表达式(expression):元函数可以通过表达式模板来构建运行时无关的表达式,实现一些高级的编译时计算和优化。

按照书中原文也可以分成以下三类:

  1. 类型(Type):元函数可以操作各种类型,包括内置类型(如整数、浮点数、布尔值等)、自定义类型(如结构体、类等)以及模板参数中的类型信息。

  2. 值(Value):元函数可以操作编译时已知的常量值,这些值可以是整数、浮点数、布尔值、指针、引用等。

  3. 模板(Template):元函数可以操作模板,包括模板参数、模板实例化以及模板元数据。它可以基于模板参数进行编译时计算,并根据不同的模板实例化生成不同的代码。

这两种分类方式的区别在哪里?

第一个分类方式将元函数能够操作的数据划分为类型、值和表达式三类,更加强调了元函数在 C++ 元编程中的应用。其中,类型是元函数最常见的操作对象,可以通过模板技术来获取、转换和操作类型信息。值则是具体的常量值,在编译时可以进行运算和计算。表达式则是通过表达式模板技术构建的运行时无关的表达式,可用于执行高级的编译时计算和优化。这种分类方式更加关注于元函数在编译时期对代码进行操作和计算的能力。

第二个分类方式将元函数能够操作的数据划分为类型、值和模板三类,更加具体地描述了元函数所能操作的数据的类型。类型表示各种类型的数据,值表示已知的常量值,而模板则表示对模板及其参数的操作和处理。这种分类方式更加突出了元函数能够操作的具体数据类型的特点。

所以无论是按照它们的特点还是书中要讲解的内容我们都按照第二种分类方式来即可.


提示:以下是本篇文章正文内容,下面内容主要为个人理解以及少部分正文内容

一、模板作为元函数的输入

书中代码:

template