模板学习笔记(一)

原创 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++进一步发展的强大推力。
 

标准模板库(STL)学习笔记

  • 2010年09月29日 16:46
  • 71KB
  • 下载

OpenCV学习笔记(十三)——模板匹配

寻找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁棒)。而OpenCV已经为我们集成好了相关的功能。函...

SpringBoot学习笔记(三):问题--th:replace老是提示解析模板出错

场景描述:很多时候,web程序包含许多templates,这时候就需要引入模板的概念,比如公共模板header.html和footer.html,然后其他模板想要引入的话,就用th:replace; ...

c++学习笔记(7):类模板定义及实例化

一、类模板定义及实例化 1. 定义一个类模板: 1 templateclass 模板参数表> 2 3 class 类名{ 4 5 // 类定义...... 6 7 };   ...

软件开发过程学习笔记(五)之测试方案模板

1 概述 1.1 目的 本项目的软件系统测试目的是验证xx是否满足软件需求说明书的全部内容。 本文档通过详细说明测试范围、内容、方案和实现环境等,为后续的软件系统测试提供指导。并通过提供软件需求说明...

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

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

Django学习笔记1 [路由机制,数据库orm,模板语言]

概述:主要总结Django的一些基本操作,与使用过程中出现的问题,使用的Django版本是1.11.2,开发平台是win10。本次涵盖的内容有url路由机制,orm(对象关系映射),模板语言(增加前后...
  • No_red
  • No_red
  • 2017年06月19日 15:57
  • 444

IntelliJ IDEA 学习笔记 - 文件代码模板的使用

本文简单介绍IntelliJ IDEA中文件代码模板的使用

React学习笔记-模板、ReactDOM.render()、JSX语法

React 起源于 Facebook 的内部项目,他从最早的UI引擎变成了一整套前后端通吃的 Web App 解决方案。衍生的 React Native 项目,目标更是宏伟,希望用写 Web App ...

黑马程序员_学习笔记:4) 面向对象2:继承、this、super、finally、Abstract、模板设计模式、接口

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------    继 承(面向对象特征之一) 好...
  • awangk2
  • awangk2
  • 2014年04月28日 15:15
  • 239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模板学习笔记(一)
举报原因:
原因补充:

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