模板学习笔记(一)

原创 2007年10月05日 21:12:00

   C++的template是实现在库设计和嵌入式设计中的关键。
template能实现抽象和效率的结合;同时template还能有效地防止代码膨胀。主要原因:template分为definition和instantiation两个部分,而instantiation只是在上下文中用到才进行。

取决于为c++template参数设计的类型系统。简单有效地表达概念定义同时又足以在现代编译器中实现。集中在c++template概念周围,基本概念包括类型系统,支持参数多态---局部类型推导和依赖名字标识扩展。接近最优的性能的iso c++ template是以template definition 和 template uses 弱分离为代价。
template-parameters (explicitly mentioned
in the template declaration) and dependent names inferred
from the definition of the template (based on the fact
that their meanings depend on template parameters).
flexibility---libraries
template---generic programming--c++ parameterization mechanism
导致令人难解的错误消息
Using concepts, type-checking of template definitions is separated from their uses, thereby making templates easier to use and easier to compile.
template--支持 generic programming, generative programming, template metaprogramming
compile-time type computation 
provide abstraction without performance degradation
(inliner)
c++ libraries are becomming more powerful, more flexible, and more expressive.----但这将导致实现的复杂性
一般性--抽象性
generic programming --- algorithm oriented
The generic programming process derives generic algorithms from
families of concrete (non-generic) implementations that exhibit
some commonality.
函数式编程思想
编程最终还是会回归到数学
Generic Programming is concerned with building highly efficient algorithms.
Consider the problem of storing objects in containers and writing algorithms to manipulate such objects.
The STL solution is based on parameterizing containers with their element types and on completely separating the algorithms from the containers.
The basic idea is that you can consider the elements of any container as a sequence of elements.
the first STL rules and principles generalize beyond belief.
based directly on the hardware model of memory and computation.
Function objects are the C++ mechanism for higher-order constructs.
The techniques based on the use of templates and largely inspired by techniques from functional programming are qualitatively different from traditional data abstraction.
using templates – to be statically type safe and efficient.
Templates are the key to embedded systems programming and high-performance numeric programming where resources management and correctness are key.
the use of iterators (and allocators) to separate logical memory access from actual memory access is key to many high-performance numeric techniques and the use of small, easily inlined, objects are key to examples of optimal use of hardware in embedded systems programming.
        c++ template从另一种角度--函数编程对问题世界进行抽象,参数化类型是template的形式上特点,函数对象则扩大了传统函数的理解,也模糊了函数与对象的边界。抽象的过程则从对象世界转移到一些基元的构造(vector, list, string, map,set等)和操作的概念层次--算法,实现数据结构和算法的最大程度的重用,而且不失效率、灵活性以及接口的易用性。在template的定义层次上类型检查的暂时缺失,导致在只有在使用时才能调试的问题,会导致许多可读性差的提示信息,c++0x则主要在concept上对这个问题进行了深入探讨,并形成了ConceptGCC编译器支持。
      从抽象层度上,template更高,在结构和操作上的抽象,而类是在结构和操作上的组织。普通的函数指针参数不可能带其他信息,而函数对象则可根据需要带初始或运行时信息,方便了函数调用适时调用。
      c++是一种强类型语言,它的发展从类型抽象、运行时确定到泛型抽象、编译时确定,很奇特。而在实际运用中,又往往只是注重其中的一个方面,即便是大师也有他的局限。发展过程似乎有一种回归感,说到这里很容易想到http://blog.csdn.net/turingbook/archive/2007/09/07/1775488.aspx关于《c与c++》间的争论,其中不乏思想灵光,也第一次让我看到关于语言的争论一点意义所在。template技术在抽象和效率上的关注使其成为c++不可或缺的组件,也是c++进一步发展的强大推力。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Django学习笔记(二)—— 模板

疯狂的暑假学习之 Django学习笔记(二)—— 模板 参考: 《The Django Book》 第四章 一、模板基础知识 1.模板是如何工作的 用 python manage.py sh...

Velocity模板技术学习笔记

基本语句语法可以查看https://www.ibm.com/developerworks/cn/java/j-lo-velocity1/HelloVelocity.javapublic class H...

C++学习笔记54——函数模板

1,函数模板的定义 template T1 my_fun(T1 v1, T2 v2); 注意: 函数模板的形参表不能为空;定义模板形参时,既可以用typename,也可以用class,两者没有...

模板方法模式学习笔记

模板方法的实现要素:抽象基类和具体子类。抽象基类:(1)基本方法:共有的方法,用private修饰     (2)抽象方法:只知道原则,不知道具体实现,要延迟到子类中实现,用protected abs...

C++中的模板学习笔记1

想要学好C++的话,或是想要真正了解C++中的精髓和本质的话,

2012/2/7 《C++ Primer Plus》第十六章:string类和标准模板库 学习笔记

《C++ Primer Plus》第十六章学习笔记 这一章粗略介绍了一下STL和泛型编程,我也是粗略地看了一看。   181:String类构造函数:   182:关于输入: C风格字...

bootstrap框架学习笔记一(模板,排版-段落-列表-表格部分)

基本的bootstrap模板 <meta name="viewport" content="width=devic

字符串单模板匹配学习笔记(一)kmp算法

【参考资料】 先上链接: 《字符串匹配的KMP算法》-阮一峰 http://kb.cnblogs.com/page/176818/ 《字符串匹配算法总结》 http://blog.csdn....

强连通图 学习笔记及tarjan模板

我是从算法导论看起的: 定义:在一个有向图中,任意两个点都是互相可达的,则称为强连通图。 解法步骤: 1.先对每个节点dfs。计算出 每个节点的finishing time f[u]。 2.对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)