C++ 泛型编程/模板 泛函编程/Lambda/λ演算
1、泛型编程(C++模板)
其中,Ada, Delpha, Java, C#, Swift 称之为 泛型/generics; ML, Scala和 Haskell 称之为 参数多态/parametric polymorphism; C++和D语言称之为 模板/template. 《设计模式/Design Patterns》称之为 参数化类型/parameterized type. 因为在这里,参数的类型在一般情况下都是未知的,而泛型编程可以支持多种类型,所以叫泛/generic。
①函数模板/Function Template:定义一个函数模板,可以支持多种类型的参数
The format for declaring function templates with type parameters is:
template <class identifier> function_declaration;
template <typename identifier> function_declaration;
比如, the C++ Standard Library contains the function template max(x, y) which returns the larger of x and y. That function template could be defined like this:
template <typename T>
inline T max(T a, T b) {
return a > b ? a : b;
}
当我们调用这个 Template Function的时候,只要max(x1, x2)就可以了,编译器会自动选择对应的typename。
函数模板/模板函数/Function template 可以 重载/overload,也就是说还可以定义与 函数模板同名的函数。
例如:
#include <iostream>
#include <algorithm>
template <typename T>
inline T max(T a, T b) {
return a > b ? a : b;
}
// 模板函数 重定义/overload/重载
int max(int a, int b)
{
return a>b ? a : b;
}
int main()
{
std::cout << max(3,7) << std::endl;
std::cout << max(3.0, 7.0) << std::endl;
std::cout << max(3, 7.0) << std::endl;// 调用 重载/overloaded 的函数
std::cout << max<double>(3, 7.0) << std::endl;
return 0;
}
REFER: Function templates
②类模板/Class Template
REFER: Class Template
2、泛函编程/函数式编程/Functional Programming
其,将电脑运算比作 数学 上的函数计算,并且避免使用程序状态以及易变物件。在 Functional Pgramming 中,最重要的基础是 λ演算/lambda calculus。
纯粹的函数式编程语言: Haskell,Miranda,Concurrent Clean。
非纯函数式编程语言:F#, Scala, Erlang, LISP, Mathematicar。
C++ 泛型编程/模板 泛函编程/Lambda/λ演算的更多相关文章
- [学习] 从 函数式编程 到 lambda演算 到 函数的本质 到 组合子逻辑
函数式编程 阮一峰 <函数式编程初探>,阮一峰是<黑客与画家>的译者. wiki <函数编程语言> 一本好书,<计算机程序的构造与解释>有讲到schem ...
- C++模板元编程(C++ template metaprogramming)
实验平台:Win7,VS2013 Community,GCC 4.8.3(在线版) 所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能力,模板使 C++ 编程变得 ...
- 泛函编程(4)-深入Scala函数类
既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...
- 泛函编程(24)-泛函数据类型-Monad, monadic programming
在上一节我们介绍了Monad.我们知道Monad是一个高度概括的抽象模型.好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码.这些能对什么是Monad提供一个 ...
- 泛函编程(9)-异常处理-Option
Option是一种新的数据类型.形象的来描述:Option就是一种特殊的List,都是把数据放在一个管子里:然后在管子内部对数据进行各种操作.所以Option的数据操作与List很相似.不同的是Opt ...
- C++ Primer 学习笔记_75_模板与泛型编程 --模板定义
模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...
- [摘录] 图灵机与lambda演算的关系
在阅读函数式编程相关资料时,看到如下一段话.感觉说的很好,可以帮助我这种学渣一点点的建立起整个知识体系. 以下片段,摘抄自豆瓣网友 赛义甫 的豆列 “逻辑与计算” 中的一段介绍. 莱布尼兹曾经有两个梦 ...
- 简单易懂的程序语言入门小册子(1):基于文本替换的解释器,lambda演算
最近比较闲,打算整理一下之前学习的关于程序语言的知识.主要的内容其实就是一边设计程序语言一边写解释器实现它.这些知识基本上来自Programming Languages and Lambda Calc ...
- 现代c++与模板元编程
最近在重温<c++程序设计新思维>这本经典著作,感慨颇多.由于成书较早,书中很多元编程的例子使用c++98实现的.而如今c++20即将带着concept,Ranges等新特性一同到来,不得 ...
随机推荐
- Oracle中的AS和IS
Oracle中的AS和IS是ORACLE为了方便而设置的同义词基本上没有不同 . 使用规则: 1.在创建存储过程(PROCEDURE)/函数(FUNCTION),以及自定义类型(TPYE)和包(PAC ...
- Notes(一)
Numerous experimental measurements in spatially complex systems have revealed anomalous diffusion in ...
- readonly disabled 区别
readonly 提交表单时包含该属性的内容 控件 disabled 不包含该属性
- linux添加ssh用户
正好有朋友问,就转过来分享下. 转自:http://blog.sina.com.cn/s/blog_6fc583e70100n6rm.html 测试环境:CentOS 5.5 1.添加用户,首先用ad ...
- 汉语转拼音pinyin4j
分享一个将汉语转成拼音的工具包:pinyin4j-2.5.0.jar,下载地址:http://download.csdn.net/detail/abc_key/7629141 使用例如以下代码 imp ...
- 在Image控件中绘制文字
//Canvas 在Image控件中绘制文字 procedure TForm1.Button1Click(Sender: TObject);begin image1.Canvas.Font.Size ...
- CocoStudio 创建简单UI资源并加入�到project
打开CocoStudio UI编辑器新项目,设置画布480*320, 加入�一个标签和一个button控件 导出项目,生成所须要的资源文件, 拷贝到cocos2dprojectResources文件夹 ...
- hdu 4044 GeoDefense (树形dp | 多叉树转二叉树)
题目链接:hdu-4044 题意 这是一个塔防游戏,地图是一个n个编号为1-n的节点的树, 节点1是敌人的基地,其他叶子节点都是你的基地. 敌人的基地会源源不断地出来怪兽,为了防止敌人攻进你的基 ...
- slave_net_timeout
http://blog.csdn.net/lwei_998/article/details/46864453
- careercup-C和C++
13.1 用C++写个方法,打印输出文件的最后K行. 解答: 一种方法是打开文件两次,第一次计算文件的行数N,第二次打开文件,跳过N-K行, 然后开始输出.如果文件很大,这种方法的时间开销会非常大. ...