C模板元编程的应用有:1、编译期纯函数式计算;2、类型操纵;3、代码生成;4、构建DSL。通过一个数三角形的程序,展示了模板元编程纯粹的编译期计算能力和纯函数式的设计技巧;由于模板元编程是⼀门纯函数式语⾔,⽤它来解决问题需要函数式编程的思维。
1、编译期纯函数式计算
通过一个数三角形的程序,展示了模板元编程纯粹的编译期计算能力和纯函数式的设计技巧;由于模板元编程是⼀门纯函数式语⾔,⽤它来解决问题需要函数式编程的思维。函数式的设计思维和数学计算是天⽣最匹配的:变量不可变,没有副作⽤,通过针对问题域构建函数,然后不断的通过函数组合来描述领域问题。
2、类型操纵
通过dates框架的一些设计,展示了如何利用模板元编程来做类型萃取、类型选择以及类型校验,使得程序变得更易用、更高效以及更安全;C++ 模板元编程会涉及⼤量的类型计算,很多时候要提取类型的信息(typedef、 常量值等),如果这些类型信息的访问⽅式不⼀致(如上⾯的迭代器和指针),我们将不得不定义特例,这会导致⼤量重复代码的出现(另⼀种代码膨胀),⽽通过加⼀层特性可以很好的解决这⼀问题。
3、代码生成
通过一个自动生成visitor设计模式的程序架构的例子,展示了利用模板元编程做代码生成和高阶模式设计的技巧。使⽤了Visitor设计模式后,每当为Animal继承体系增加⼀个新的虚函数,只⽤在AnimalVisitor继承体系中增加⼀个新的⼦类即可。但如果要为Animal增加⼦类,那么AnimalVisitor继承体系中的所有类就都得变化。
4、构建DSL
展示如何通过模板元编程构建一个描述有限状态机的DSL,总结了构建C++内部DSL的相关技巧;C++是⼀门⾮常适合⽤来构建DSL(Domain Specific Language)的语⾔,它的多范式特点为它提供了丰富的⼯具,尤其是C++提供了:⼀个静态类型系统;近似于零抽象惩罚的能⼒(包括强⼤的优化器);预处理宏,能够以⽂本替换的⽅式操纵源代码;⼀套丰富的内建符号运算符,它们可以被重载,且对重载的语义⼏乎没有任何限制;⼀套图灵完备的模板计算系统(模板元编程)。
延伸阅读:
什么是模板元编程?
模板元编程是一种元编程技术,编译器使用模板产生暂时性的源码,然后再和剩下的源码混合并编译。这些模板的输出包括编译时期常量、数据结构以及完整的函数。如此利用模板可以被想成编译期的运行。这种技术被许多语言使用,最为知名的当属C++,其他还有Curl、D、Eiffel,以及语言扩展,如Template Haskell。
使用模板作为元编程的技术需要两阶段的操作。首先,模板必须被定义;第二,定义的模板必须被实体化才行。 模板的定义描述了生成源码的一般形式,而使实体化则导致了某些源码的组合根据该模板而生成。
模板元编程是一般性地图灵完全(Turing-complete),这意味着任何可被电算软件表示的运算都可以透过模板元编程以某种形式去运算。
模板与宏(macros)是不同的。所谓宏只不过是以文字的操作及替换来生成代码,虽然同为编译期的语言特色,但宏系统通常其编译期处理流的能力(compile-time process flow abilities)有限,且对其所依附之语言的语义及类型系统缺乏认知(一个例外是LISP的宏)。
文章标题:C模板元编程的应用有哪些,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37167