Generic Programming v1

泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。

c++是非单根继承的,是多重继承的;

qsort泛化之后就变成了:

template<class RandomAccessIterator, class Compare>

void sort(RandomAccessIterator first, RandomAccessIterator last,Compare comp);

其中first,last这一对迭代器代表一个前闭后开区间,迭代器和前闭后开区间都是STL的核心概念。迭代器建模的是内建指针的接口(解引用、递增、递减等)、前闭后开区间是一个简单的数学概念,表示从first(含first)到last(不含last)的区间内的所有元素。此外,comp是一个仿函数(functor)。仿函数也是STL的核心概念,仿函数是建模的内建函数的接口,一个仿函数可以是一个内建的函数,也可以是一个重载了operator()的类对象,只要是支持函数调用的语法形式就可成为一个仿函数。

通过操作符重载,C++允许了自定义类型具有跟内建类型同样的使用接口;又通过模板这样的参数化类型机制,C++允许了一个算法或类定义,能够利用这样的接口一致性来对自身进行泛化。例如,一个原本操作内建指针的算法,被泛化为操纵一切迭代器的算法。一个原本使用内建函数指针的算法,被泛化为能够接受一切重载了函数调用操作符(operator())的类对象的算法。

泛型编程是c++支持的一种编程模式(另外还有面向过程编程的模式和面向对象编程oop的模式),它与oop的目标相同,即使重用代码和抽象通用概念的技术更加简单。不过oop强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。它们的侧重点不同。oop是一个管理大型项目的工具,而泛型编程提供了执行常见任务(如对数据排序或合并链表)的工具。术语泛型(generic)指的是创建独立于类型的代码,即与类型无关的代码。c++的数据表示有多种数据类型--整数,小数,字符,字符串,用户定义的类型以及由多种类型组成的复合结构。例如,要对不同类型的数据进行排序,通常必须为每种类型创建一个排序函数。泛型编程需要对语言进行扩展,以便可以只编写一个泛型(即不是特定类型的)函数,并将其用于各种实际类型。c++模板提供了完成这种任务的机制。

时间: 2024-10-05 23:46:23

Generic Programming v1的相关文章

&lt;Effective C++&gt;读书摘要--Templates and Generic Programming&lt;一&gt;

1.The initial motivation for C++ templates was straightforward: to make it possible to create type-safe containers like vector, list, and map. Ultimately, it was discovered that the C++ template mechanism is itself Turing-complete: it can be used to

【泛型】Generic

参考: http://blog.csdn.net/lonelyroamer/article/details/7864531#comments http://blog.csdn.net/lonelyroamer/article/details/7868820#comments http://blog.csdn.net/LonelyRoamer/article/details/7927212#comments 关于泛型的一些重要知识点 泛型由来:早期Java版本(1.4及之前)如果要代指某个泛化类对

Know Well More Than Two Programming Languages

Know Well More Than Two Programming Languages Russel Winder THE PSYCHOLOGY OF PROGRAMMiNG: people have known for a long time now that programming expertise is related directly to the number of different programming paradigms that a programmer is comf

C++ Core Guidelines

C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very early draft. It is inkorrekt, incompleat, and pµøoorly formatted. Had it been an open source (code) project, this would have been release 0.6. Copy

Lock-Free Data Structures

By Andrei Alexandrescu, October 01, 2004 Post a Comment Lock-free data structures guarantee the progress of at least one thread when executing mutlithreaded procedures, thereby helping you avoid deadlock. Andrei Alexandrescu is a graduate student in

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

c++ 泛型编程及模板学习

泛型编程,英文叫做Generic programming 可以理解为,具有通用意义的.普适性的,编程. 比如,你要实现一个函数去比较两个数值的大小,数值可能是int或者string.初次尝试,我们直观会想到定义多个重载函数.如下: int compare(const string &v1, const string &v2) { if( v1 < v2) return -1; if ( v2 < v1) return 1; return 0; } int compare(con

c++模板 与 泛型编程基础

C++模板 泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础. (1)定义函数模板(function template) 函数模板是一个独立于类型的函数,可以产生函数的特定类型版本. // implement strcmp-like generic compare function template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1;

使用Boost.Python构建混合系统(译)

目录 Building Hybrid Systems with Boost.Python 摘要(Abstract) 介绍(Introduction) 设计目标 (Boost.Python Design Goals) Hello Boost.Python World 库概述 (Library Overview) 类公开 (Exposing Classes) 序列化 Serialization 对象接口 Object interface 考虑混合编程 Thinking hybrid 开发历史 Dev