c++模板元编程一:基本概念

1 基本概念

1.1 meta program 元程序

可以用meta program生成object program, 也可以object program作为数据看待,从而组装出更大的object program 元程序是处理程序的程序,如大家熟悉的编译器、解释器、类型检查器、定理证明器、程序生成器、转换系统和程序分析器等等

1.2 object program 目标程序

目标程序,又称为“目的程序”,为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名-—由语言处理程序(汇编程序,编译程序,解释程序)将源程序处理(汇编,编译,解释)成与之等价的由机器码构成的,计算机能够直接运行的程序,该程序叫目标程序。目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。

1.3 元编程 meta programming

指的是对元程序的编写工作

1.4 元语言

编写元程序的语言

1.5 目标语言

编写目标程序的语言

1.6 总结

我们用C++语言写程序, C++语言是一种目标语言,通过编译器处理后,生成.obj文件,.obj文件内部就是目标程序,经过链接器链接后,形成可执行程序。 从DSL的角度来看,元编程就是用一种DSL语言编写运行,然后获得目标语言和程序。DSL可以和目标语言不同,也可以相同。如果相同,就是DSL本身是宿主语言的一部分。C++模板元编程语言就是这种DSL,天然使用了C++的模板语言,从而产生目标语言。使用C++模板元编程可以进行以下两种计算:

  1. 数值计算
  2. 类型计算
时间: 2024-11-06 08:38:48

c++模板元编程一:基本概念的相关文章

读书笔记 effective c++ Item 48 了解模板元编程

1. TMP是什么? 模板元编程(template metaprogramming TMP)是实现基于模板的C++程序的过程,它能够在编译期执行.你可以想一想:一个模板元程序是用C++实现的并且可以在C++编译器内部运行的一个程序,它的输出——从模板中实例化出来的C++源码片段——会像往常一样被编译. 2. 使用TMP的优势 如果这没有冲击到你,是因为你没有足够尽力去想. C++不是为了模板元编程而设计的,但是自从TMP早在1990年被发现之后,它就被证明是非常有用的,为了使TMP的使用更加容易

细说C++模板元编程

模板元编程根在模板,模板的使用很简单:为自动代码生成提供方便,提高程序员生产率的一个非常有效的方法就是代码复用,而面向对象很重要的一个贡献就是通过内部紧耦合和外部松耦合将思想转化成一个个容易复用的概念,但是面向对象提供的工具箱里面包含了所包含的继承,组合和多态并不能完全满足实际编程总对于代码复用的全部要求,与市模板就应运而生了. 模板时更智能的宏,模板和红都是编译前生成代码,模板和红相比,它站在更高的抽象上上面,宏操作的是字符串token,然而模板却能够操作c++中的类型,所以模板更安全,更智能

C++模板元编程 - 2 模仿haskell的列表以及相关操作

这是昨天和今天写的东西,利用C++的可变模板参数包以及包展开,模式匹配的一些东西做的,感觉用typename...比轮子叔那个List<A,List<B, List<C, D>>>的设计要好看不少. List有一个很巧妙的继承,只有那么做才能使用类似于List<>::Rest的写法,直接定义成template<typename T, typename... TArgs>List是不行的. Change这里可以给一个args...换另一个包装,这里

引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针

 1.引用内部函数绑定机制 #include<iostream> #include<functional> usingnamespacestd; usingnamespacestd::placeholders; //仿函数.创建一个函数指针,引用一个结构体内部或者一个类内部的共同拥有函数 structMyStruct { voidadd(inta) { cout <<a <<endl; } voidadd2(inta,intb) { cout <&

C++拾遗--模板元编程

C++拾遗--模板元编程 前言 模板元是用于递归加速的,把运行期的函数调用变到编译期进行代码展开,类似于内联函数.下面看一个实例:斐波那契数列第n项求解. 模板元编程 #include <iostream> #include <ctime> using namespace std; //递归法 int fib(int n) { if (n < 0) return 0; if (n == 1 || n == 2) return 1; return fib(n - 1) + fi

模板元编程

//模板元把运行时消耗的时间,在编译期间优化 //递归极其消耗时间 1 #include <iostream> 2 3 //模板元把运行时消耗的时间,在编译期间优化 4 //递归极其消耗时间 5 6 template <int N> 7 struct data 8 { 9 enum { res = data<N - 1>::res + data<N - 2>::res }; 10 }; 11 12 template <> 13 struct da

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

前言:毕设时在开源库上做的程序,但是源码看得很晕(当时导师告诉我这是模板元编程,可以不用太在乎),最近自己造轮子时想学习STL的源码,但也是一样的感觉,大致了解他这么做要干什么,但是不知道里面的机制.于是开始学习<C++模板元编程>,看完第二章对一些东西豁然开朗. PS:该书也有点老了,C++11标准还没出来,主要用的Boost库. Traits(特征) 说正题,在STL中经常可以见到后缀为traits的名字,比如经常用到的std::string,本质是类模板basic_string的第一个参

模板元编程加速递归

//模板元编程加速递归 //缺点:模板元在编译时处理,无法调试,并且会加大代码体积 #include<iostream> using namespace std; template <int N> struct data { enum{res = data<N - 1>::res + data<N - 2>::res}; }; template <>//模板具体化 struct data<1> { enum{res = 1}; };

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun