我已经注意到了C# generics are quite different from C++ templates。我已经阅读了this question并回答了它,并对差异有了基本的了解。
但是我不明白设计差异的原因。我的意思是C ++在设计C#时已经非常发达。在C ++模板中,C#开发人员没有克隆C ++模板但是在泛化程度如此大不同的情况下是不是最理想的?
泛型可以做什么C ++模板不能做什么?什么是C#泛型比C ++模板更好?设计C#泛型的行为与C ++模板的不同之处是什么?
答案 0 :(得分:4)
原因是一个是模板而另一个不是。听起来有多余?部分是因为你问了一个问题oalong“为什么汽车与飞机不同”。
模板是一种非常复杂的机制,很少使用大部分的强制性。我想你真的不知道模板可以做什么 - 只有25%的C ++模板人们每天都在使用。这是主要问题 - 它们太过于复杂。编译器很难。
因此,泛型应该为最常见的模板使用采用不同的方法,这是通用的一般类型(例如,没有专业化)。
泛型可以做什么C ++模板不能做什么?
没有
设计C#泛型的行为与C ++模板的不同之处是什么?
事实上C ++泛型很难被任何人掌握,而且很难为编译器正确实现,而且大多数都没有使用过。
答案 1 :(得分:4)
它完全不同的主要原因。
在编译时评估C ++模板 C#泛型在运行时进行评估。
此外,c ++模板很复杂。在开发C#时,他们决定降低模板的复杂性。用户和运行时评估实现。
答案 2 :(得分:1)
泛型可以做什么C ++模板不能做什么?
IENumerable<Derived>
可以在IEnumerable<Class>
被请求时使用,其中Derived
继承自Class
。