![]() |
1
6
它们实际上是以非常不同的方式实现的。在C++中,模板在编译时被专门化,而.NET泛型在运行时是专门的。
换句话说,C++代码类似
我的意思是:
它被编译成这样:
因此,在编译后的C++代码的二进制中,模板“不存在”。 在.NET中,同一行将导致编译器为类发出元数据,该类指示应在运行时替换泛型类型参数。实际上并没有听起来那么糟糕,因为JIT编译器应该能够巧妙地处理它们。
这是用额外的信息编译的,指示它是一个泛型类。这个
NET泛型不试图复制所有C++模板功能。C++模板明显更强大,但代价是更难处理(C++模板实际上是 Turing-complete ) |
![]() |
2
1
一种方法是在编译时进行模板扩展,但泛型是.NET中的一个运行时特性。 C FAQ有一个 good article 以及面试环节,这些都克服了一些差异。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 5 月前 |
![]() |
CactusCake · if语句中应有分号 6 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 6 月前 |