您的位置:首页 > 编程语言 > C语言/C++

《LRS项目重构来看"泛型"(二)——异曲同工,泛型过程和C++函数模板的比较》

2015-05-09 16:45 218 查看
引言:

   上一篇博客我们谈到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项目重构来看"泛型"——(三)刨根问底,泛型的工作原理》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐