《LRS项目重构来看"泛型"(二)——异曲同工,泛型过程和C++函数模板的比较》
2015-05-09 16:45
218 查看
引言:
上一篇博客我们谈到C++中的模板,一个是类模板,一个是函数模板。重点说了一下函数模板。话说,其实C++中的模板和.NetFramework中的泛型可谓是是异曲同工!
首先,从泛型的思想上来看:
将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从而实现高度可重用的开发。通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高系统性能并得到高质量的代码(因为可以重用数据处理算法,没有必要复制类型特定的代码)。
其次,从形式上看:
C++中定义一个函数模板:(在sub main 过程中生成并使用模板函数)
vb.net中定义一个泛型过程:(并在sub main 过程中调用该过程)
语言环境:vb.net(vs2013旗舰版),新建控制台程序。
![](https://img-blog.csdn.net/20150509171401572?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDEzMTQ1Mm4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最后:从本质上来看
我觉得泛型和模板的特点都可以概括为这样一句话 “一次编码,多次使用,类型化参数 ”
小结:讲到这里,是不是觉得,哇塞!真的是一样的啊!不论是从思想上,还是形式上,还是本质上来说。之所以说他们一样,是为了让大家觉得他很简单,只不过是我们学过的东西换了件衣服而已。其实,.NetFramework中泛型远远不止这些内容,具体请参见msdn中的详细介绍:点此链接《泛型概述》
那么,真的是没有区别了吗?泛型和C++中的模板哪里不一样呢?泛型的工作原理是怎么的呢?
欲知后事如何,请听下回分解:《LRS项目重构来看"泛型"——(三)刨根问底,泛型的工作原理》
上一篇博客我们谈到C++中的模板,一个是类模板,一个是函数模板。重点说了一下函数模板。话说,其实C++中的模板和.NetFramework中的泛型可谓是是异曲同工!
首先,从泛型的思想上来看:
将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从而实现高度可重用的开发。通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高系统性能并得到高质量的代码(因为可以重用数据处理算法,没有必要复制类型特定的代码)。
其次,从形式上看:
C++中定义一个函数模板:(在sub main 过程中生成并使用模板函数)
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">#include <string> #include <iostream> using namespace std; template<typename T> void print(const T& var) { cout << var << endl; } int main() { string str("Hello World"); const int num=1234; print(str); print(num); return 0; } //输出:Hello World // 1234 </span></span>
vb.net中定义一个泛型过程:(并在sub main 过程中调用该过程)
语言环境:vb.net(vs2013旗舰版),新建控制台程序。
<span style="font-family:KaiTi_GB2312;font-size:18px;">Module fanxingfunction Sub main() Dim A As New test A.fanxingSub("hello world!") A.fanxingSub(123) A.fanxingSub(234324.23434) Console.Read() End Sub Public Class test Public Sub fanxingSub(Of t)(ByVal text As t) Dim str As t str = text Console.WriteLine(str) End Sub End Class End Module</span>运行效果如图:
最后:从本质上来看
我觉得泛型和模板的特点都可以概括为这样一句话 “一次编码,多次使用,类型化参数 ”
小结:讲到这里,是不是觉得,哇塞!真的是一样的啊!不论是从思想上,还是形式上,还是本质上来说。之所以说他们一样,是为了让大家觉得他很简单,只不过是我们学过的东西换了件衣服而已。其实,.NetFramework中泛型远远不止这些内容,具体请参见msdn中的详细介绍:点此链接《泛型概述》
那么,真的是没有区别了吗?泛型和C++中的模板哪里不一样呢?泛型的工作原理是怎么的呢?
欲知后事如何,请听下回分解:《LRS项目重构来看"泛型"——(三)刨根问底,泛型的工作原理》
相关文章推荐
- 《从LRS项目重构来看‘泛型’(一)——追根寻源,看C++中的模板技术简介》
- 《从LRS项目重构来看“数据类型”——(第一话)DataTable转换泛型集合出现的类型冲突》
- 《从LRS项目重构来看“数据类型”——(第二话)局部类型推理(一)》
- 《从LRS项目来看”泛型“(三)——刨根问底,泛型工作原理》
- 《从LRS项目重构看“泛型”(四)——代码实战,将DataTable转成泛型实体集合》
- 《从LRS项目重构来看“数据类型”——(第二话)局部类型推理(二)》
- maven项目中,添加依赖后,出现"Dependency 'xxxx‘ not found"解决过程
- 佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"
- 一、问题 MyEclipse怎么导出可运行的jar包。 二、测试环境 MyEclipse V8.6 三、操作过程 1、java项目没有导入第三方jar包的情况 这时候打包就比较简单: ①首先在MyE
- 【项目管理】PMBOK2008与2004过程变更比较
- 机房重构之实体、datatable、泛型集合 哪个比较“刚”
- 记录下对项目进行重构的过程
- driverstudio生成的项目在编译过程的"ntstrsafe.h"找不到问题的解决
- 最近的项目,也许是产品吧,用的客户好几个,数据库也经常更新,所以就写了个比较数据库表和字段有不同的存储过程
- JAVA简单项目"购物系统"的整个开发过程详解(内含源码和注释)
- 《从LRS项目重构看如何做UI设计——组合查询的界面创意设计(一)》
- Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
- 一些我在做项目过程中用到的比较重要的方法
- 1. spring boot项目创建过程中遇到的问题(一):Exception in thread "main" java.lang.UnsupportedClassVersionError
- C++项目中的extern "C" {}