泛型与函数式比较
来源:互联网 发布:单片机驱动无源蜂鸣器 编辑:程序博客网 时间:2024/05/22 21:38
- 泛型设计
- 函数式设计
- 测试函数
- 后记
用两个数做计算来看泛型思维和函数式思维
泛型设计
enum Operation{ ADD, SUB, MUL, DIV};// generic programmetemplate <typename T>T add(const T _num1,const T _num2){ return _num1+_num2;}template <typename T>T calculate(const T _num1,const T _num2, const Operation _op){ switch(_op) { case Operation::ADD: { return add<decltype(_num1)>(_num1, _num2); break; } default: { break; } }}
泛型设计:类似于传统设计,但是考虑的重点是该代码段的通用性,即任何支持 ADD 操作的类型都可以使用该代码段。反之,如果想让程序兼容某个泛型结构,那你最好了解该泛型结构所支持的操作。就像使用 STL 的 algorithm 库和容器时,使用自定义类一般需要添加 < 或 != 的比较操作,因为这些算法或类的实现中有需要用到 < 或 != 这两个比较运算符。
函数式设计
// functional programmetemplate <typename T>function<T(T,T)> calculateSelection(const Operation _op){ switch(_op) { case Operation::ADD: { return [](T _num1, T _num2){ return _num1+_num2; }; } }}
函数式设计:函数是第一等公民(来自 Haskell 邪教的宣传,然并卵),我可以将函数当做对象,在要用的时候才用,理所当然的,你应该能想到,惰性计算这个东西,可以看到,我返回的结果是一个 lambda 表达式,而且是泛型的 lambda 表达式,这个表达式在编译期由编译器推导出来。
测试函数
int main(int argc, char const *argv[]) { int x = 2,y = 3; Operation operation = Operation::ADD; // 泛型调用 cout << calculate(x, y, operation) << endl; // 函数式调用 cout << calculateSelection<decltype(x)>(operation)(x,y) << endl; return 0;}
函数式设计在调用的时候,如果我愿意,我可以保留一个可调用对象来保存这个生成的了 lambda 表达式,然后在想用的时候再用。
后记
其实泛型与函数式没啥可比较的,因为它们的关注点不同,虽然它们都是某一种编程范式。
CSDN 辣鸡 MD 编辑器,无序列表格式全丢
阅读全文
0 0
- 泛型与函数式比较
- 存储过程与函数比较
- 存储过程与函数比较
- 函数式编程与面向对象编程的比较
- 宏函数与内联函数比较
- 构造函数与普通函数的比较
- 宏函数与普通函数的比较
- 指针与函数_比较函数指针
- MySQL与Oracle 差异比较之函数比较
- 函数指针、函数对象、仿函数比较与入门
- 函数指针、函数对象、仿函数比较与入门
- Oracle的Replace函数与translate函数详解与比较
- Oracle的Replace函数与translate函数详解与比较
- C++的get()函数与getline()函数使用与比较
- Oracle的Replace函数与translate函数详解与比较
- Oracle 与 SQL Server 函数的比较
- SQL与ORACLE常用函数比较
- 内联函数与宏的比较
- 网页服务器开发:CGI(2)
- Mybatis foreach 问题 Parameter 'item' not found
- HTTP协议详解
- Java+Selenium3方法篇10-findElement之By PartialLinkText
- Spring Security(19)——对Acl的支持
- 泛型与函数式比较
- WebRTC 初探
- 我的第一篇博客
- Android下面打印进程函数调用堆栈(dump backtrace)的方法
- C++类内存分布 通过Visual studio 2013查看
- 在NT中直接访问物理内存
- 找出奇数个数中唯一出现一次的数
- 与位运算有关的算法题思路总结
- 一文看懂25个神经网络模型