免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3280 | 回复: 6
打印 上一主题 下一主题

C++ 模板和 C# 泛型之间的区别(C# 编程指南) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 12:26 |只看该作者 |倒序浏览
Visual Studio 2005 其他版本  Visual Studio 2010
Visual Studio 2008

C# 泛型和 C++ 模板都是用于提供参数化类型支持的语言功能。然而,这两者之间存在许多差异。在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C++ 模板的复杂性。此外,C# 并不尝试提供 C++ 模板所提供的所有功能。在实现层面,主要区别在于,C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。有关更多信息,请参见运行库中的泛型(C# 编程指南)。

以下是 C# 泛型和 C++ 模板之间的主要差异:

C# 泛型未提供与 C++ 模板相同程度的灵活性。例如,尽管在 C# 泛型类中可以调用用户定义的运算符,但不能调用算术运算符。

C# 不允许非类型模板参数,如 template C<int i> {}。

C# 不支持显式专用化,即特定类型的模板的自定义实现。

C# 不支持部分专用化:类型参数子集的自定义实现。

C# 不允许将类型参数用作泛型类型的基类。

C# 不允许类型参数具有默认类型。

在 C# 中,尽管构造类型可用作泛型,但泛型类型参数自身不能是泛型。C++ 确实允许模板参数。

C++ 允许那些可能并非对模板中的所有类型参数都有效的代码,然后将检查该代码中是否有用作类型参数的特定类型。C# 要求相应地编写类中的代码,使之能够使用任何满足约束的类型。例如,可以在 C++ 中编写对类型参数的对象使用算术运算符 + 和 - 的函数,这会在使用不支持这些运算符的类型来实例化模板时产生错误。C# 不允许这样;唯一允许的语言构造是那些可从约束推导出来的构造。

转载自:http://msdn.microsoft.com/zh-cn/library/c6cyy67b(v=VS.80).aspx

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-12-20 16:36 |只看该作者
给蚂蚁取名叫大象,以为就有了大象的能力。
c#java的泛型就不要和c++比较了,没任何意义。

论坛徽章:
0
3 [报告]
发表于 2011-12-20 16:53 |只看该作者
比python中的模板差太远了。

python默认一切都是模板,连尖括号都不用,也没有任何限制,爱搞什么搞什么,真执行到了,再临时字符串搜索被调用的方法。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
4 [报告]
发表于 2011-12-21 10:16 |只看该作者
狗蛋 发表于 2011-12-20 16:53
比python中的模板差太远了。

python默认一切都是模板,连尖括号都不用,也没有任何限制,爱搞什么搞什么 ...

所以python才慢的象蜗牛啊。

论坛徽章:
0
5 [报告]
发表于 2011-12-21 11:06 |只看该作者
noword2k 发表于 2011-12-21 10:16
所以python才慢的象蜗牛啊。

没错。不过好像你还不明白,我和2楼都是在吐槽把这种运行期确定类型称为“泛型”、并大言不惭地和C++的泛型相提并论的骗子啊。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
6 [报告]
发表于 2011-12-21 11:09 |只看该作者
。。。。动态语言和静态语言没有可比性吧,毕竟是解决不同问题的。

论坛徽章:
0
7 [报告]
发表于 2011-12-21 11:51 |只看该作者
本帖最后由 KanonInD 于 2011-12-21 11:59 编辑

对于静态语言,支持“类型推导”的话,模板和范型就好办了。
http://zh.wikipedia.org/zh/%E7%B1%BB%E5%9E%8B%E6%8E%A8%E8%AE%BA
http://en.wikipedia.org/wiki/Type_inference
http://en.wikipedia.org/wiki/Parametric_polymorphism
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP