templates(1.1)

为什么使用 Templates?

C++ 要求我们使用各种特定类型(specific types)来声明变量、函数和其它各种实体(entities);
然而,很多用以处理「不同类型之数据」的程序代码看起来都差不多。特别是当你实作算法(像是quicksort),或实作如 linked-list 或 binary
tree
之类的数据结构时,除了所处理的类型不同,程序代码实际上是一样的。如果你使用的编程语言并没有针对这个问题支持某种特殊的语言特性,那么你有数种退而次之的选择:

1. 针对每一种类型写一份程序代码。

2. 使用 common base type(通用基础类型,例如 Object 或
void*)来编写代码。

3. 使用特殊的 preprocessors(预处理器。译注:意指编译之前预先处理的宏,
macros)。

如果你是从 C、Java 或其它类似语言转到C++ 阵营,可能这三种方法你都用过。但是每一种方法都有其缺点:

1.
如果为每一种类型写一份程序代码,你就是「不断做重复的事情」。你会在每一份程序代码中犯下相同的错误(如果有的话),而且不敢使用更复杂但更好的算法,因为这会带来更多错误。

2. 如果你使用一个 common base
class(通用基础类别),就无法获益于「类型检验」。而且某些 classes 可能必须从其它特殊的 base classes
继承而来,这就给程序维护工作带来更多困难。

3. 如果你使用特殊的 preprocessors(预处理器),例如 C/C++
preprocessors,你将失去「格式化源码」(formatted source
code)的好处。预处理机制对于作用域(scope)和类型(types)一无所知,只是进行简单的文字替换。

Templates 可以解决你的问题,而又不带上述提到的缺点。所谓 templates,是为「尚未确定之型别」所写的
functions 或 classes。使用 templates 时,你可以显式(明确)或隐式(隐喻)地将型 别当做自变量(argument)来传递。由于
templates 是一种语言特性,类型检查(type checking)和 作用域(scope)的好处不会丧失。

Templates 如今已被大量运用。就拿 C++标准库来说,几乎所有程序代码都以 templates 写成。
标准库提供各式各样的功能:对 objects 和 values 排序的各种算法、管理各种元素的数据 结构(容器类别,container
classes)、支持各种字符集的 string(字符串)。Templates
使我们得以将程序的行为参数化、对程序代码优化(最佳化),并将各种信息参数化。这些都会在后续章节中讲述。

函数模板

本章将介绍 function templates。所谓 function templates 是指藉由参数化手段表现一整个族群的

Function templates 可为不同类型的数据提供作用行为。一个 function template
可以表示一族(一整群)functions,其表现和一般的 function
并无二致,只是其中某些元素在编写时尚未确定。换言之,那些「尚未确定的元素」被「参数化」了。让我们看一个实例。

2.1.1 定义 Template

下面的 function template 传回两个数值中的较大者:


// basics/max.hpp
template <typename T>
inline T const& max (T const& a, T const& b)
{
  // 如果 a<b 就传回 b,否则传回 a
  return a < b ? b : a;
}

在 function template 被调用时,经由传递具体类型而使 T 得以被具体指定。你可以使用任何类型(包括基本类型和
class 类型等等), 只要它支持T 所要完成的操作。本例中类型 T
必须支持operator< 以比较两值大小。

templates(1.1),布布扣,bubuko.com

时间: 2024-12-31 15:36:39

templates(1.1)的相关文章

Django的第一个Templates

1.URL配置方法: myblog中的urls.py 的文件 from django.conf.urls import url,include from django.contrib import admin import blog.views as bv urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', include('blog.urls')), ] blog中创建一个urls.py文件 from django.conf

springboot 1.5.2 thymeleaf 添加templates 静态资源访问路径

从velocity 模板切换到thymeleaf 后, 默认模板位置为templates , 有时候静态资源方在该目录下会出现访问404错误 解决办法: application.properties 中添加: spring.mvc.static-path-pattern=/** spring.resources.static-locations=classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/,c

[Ember] Ember.js Templates

In this lesson, we'll go over some of the basics of Ember.js templates and how they work with controllers. Generate a controller: ember g controller hello Generate a Template: ember g template application Template syntax: application.hbs: {{#if showN

warning: templates not found

在 Mac上用 SourceTree 克隆代码的时候, 出现了 warning: templates not found /user/local/git/share/git-core/templates 警告,导致克隆失败 在终端输入 sudo mkdir /usr/local/git sudo mkdir /usr/local/git/share sudo mkdir /usr/local/git/share/git-core sudo mkdir /usr/local/git/share/g

free CSS and HTML5 site templates

http://templated.co/ 模板 A collection of 850 free CSS and HTML5 site templates, designed & built by Cherry + AJ and released under the Creative Commons https://tampermonkey.net/ Tampermonkey : Tampermonkey is a free browser extension and the most popu

【Silverlight】Templates的用法

<Button Content="A Custom Button Template" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="174,120,0,0"> <Button.Template> <ControlTemplate TargetType="Button" > <Border Bor

格式工厂(三) Variadic Templates

版权声明:本文为博主原创文章,未经博主允许不得转载. 这次主要介绍C++11的又一个新特性 Variadic Templates (可变模板参数) 它的实现类似于initializer_list<>,它可是使类模板接受一包参数 本节主要应用递归的形式介绍 Variadic  Templates 1.简单的调用 #include <iostream> #include "string" using namespace std; void printX() {}//

Django Templates

二分春色到穷阎,儿女祈翁出滞淹.幽蛰夜惊雷奋地,小窗朝爽日筛帘. 惠风全解墨池冻,清昼胜翻云笈签.亲友莫嗔情话少,向来屏息似龟蟾. 料峭寒犹薄,阴云带晚烟. 雨催惊蛰候,风作勒花开. 日永消香篆,愁浓逼酒船. 为君借余景,收拾赋新篇. 作者:小亲姐姐来源链接:http://www.qbaobei.com/jiaoyu/407464.html来源:亲亲宝贝著作权归作者所有. 料峭寒犹薄,阴云带晚烟. 雨催惊蛰候,风作勒花开. 日永消香篆,愁浓逼酒船. 为君借余景,收拾赋新篇. 作者:小亲姐姐来源链

C++模板(Templates)

模板(template)是泛型编程的基础,"泛型"的含义就是没有不依赖具体的数据类型.模板的引入是为了创建一般性的类(模板类)或者函数(模板函数).典型的容器比如迭代器/算法等是泛型编程的典型案例.例如,定义了一个vector,可以使用vector<int>, vector<string>, vector<vector>等等. 函数模板 模板函数的一般定义方式为: 这里的type可以看做是代表了一种数据类型的占位符名称, 在函数内部的定义中可以使用它

django复习笔记3:urls/views/templates三板斧

0.先看看文件结构 sh-3.2# tree -L 2 mysite/ mysite/ ├── __pycache__ │   └── manage.cpython-34.pyc ├── blog │   ├── __init__.py │   ├── __init__.pyc │   ├── __pycache__ │   ├── admin.py │   ├── admin.pyc │   ├── migrations │   ├── models.py │   ├── models.pyc