我很好奇哪些静态类型的语言没有泛型支持(在较小程度上,哪些语言历史上没有泛型),以及它们如何处理它。
用户只是到处投吗?是否有一些用于基本集合的特殊调味料,例如列表和字典,允许这些类型是通用的?
为什么这些语言没有泛型?是为了避免潜在的复杂性还是其他原因?
我很好奇哪些静态类型的语言没有泛型支持(在较小程度上,哪些语言历史上没有泛型),以及它们如何处理它。
用户只是到处投吗?是否有一些用于基本集合的特殊调味料,例如列表和字典,允许这些类型是通用的?
为什么这些语言没有泛型?是为了避免潜在的复杂性还是其他原因?
C - 以及历史上的 C++,在它被称为 C++ 之前 - 要求您手动将“泛型”类型扩展为非泛型(即 C 预处理器宏等效于 C++ 模板)或转义类型系统(即 void 指针)。
但是,数组(列表)被视为复合类型而不是单一类型。例如,您可以拥有一个 short 数组,但不能将其视为 chars 数组甚至 long 数组。
这在 C 中并不是一个真正的大问题,尽管有时很不方便。把它放在上下文中,它确实代表了 40 年前的权衡。
下载 java 1.4 或 1.3 并自己尝试。
提示:是的,可能会有很多演员表
如何处理:我见过一个组织强制任何 API 不使用集合(在方法声明中)而是使用数组以避免用户混淆。另一种方法是创建一个特定的集合类,该集合类仅适用于某些类,例如StringList
等
Pascal 的原始形式不支持泛型。如果你想要一个链表,你需要为你的特定类型创建一个(例如 IntLinkedList)。
现代版本的 Pascal(例如 ObjectPascal/Delphi)可能提供某种形式的泛型。
C# 直到 v2.0 才支持泛型。所以是的,那么你需要从Object
.
我想 VB.Net 也是如此。
对此的简短回答是 C++ 模板。与限制现有类型的泛型不同,模板是在编译时生成新类型的一种方式。像大多数代码生成解决方案一样,它不是一个非常令人满意的解决方案:因此我们继续前进。