2

我很好奇哪些静态类型的语言没有泛型支持(在较小程度上,哪些语言历史上没有泛型),以及它们如何处理它。

用户只是到处投吗?是否有一些用于基本集合的特殊调味料,例如列表和字典,允许这些类型是通用的?

为什么这些语言没有泛型?是为了避免潜在的复杂性还是其他原因?

4

5 回答 5

2

C - 以及历史上的 C++,在它被称为 C++ 之前 - 要求您手动将“泛型”类型扩展为非泛型(即 C 预处理器宏等效于 C++ 模板)或转义类型系统(即 void 指针)。

但是,数组(列表)被视为复合类型而不是单一类型。例如,您可以拥有一个 short 数组,但不能将其视为 chars 数组甚至 long 数组。

这在 C 中并不是一个真正的大问题,尽管有时很不方便。把它放在上下文中,它确实代表了 40 年前的权衡。

于 2010-10-07T10:26:16.923 回答
1

下载 java 1.4 或 1.3 并自己尝试。

提示:是的,可能会有很多演员表

如何处理:我见过一个组织强制任何 API 不使用集合(在方法声明中)而是使用数组以避免用户混淆。另一种方法是创建一个特定的集合类,该集合类仅适用于某些类,例如StringList

于 2010-10-07T10:15:49.123 回答
0

Pascal 的原始形式不支持泛型。如果你想要一个链表,你需要为你的特定类型创建一个(例如 IntLinkedList)。

现代版本的 Pascal(例如 ObjectPascal/Delphi)可能提供某种形式的泛型。

于 2010-11-01T16:58:09.990 回答
0

C# 直到 v2.0 才支持泛型。所以是的,那么你需要从Object.

我想 VB.Net 也是如此。

于 2010-11-01T17:07:48.050 回答
0

对此的简短回答是 C++ 模板。与限制现有类型的泛型不同,模板是在编译时生成新类型的一种方式。像大多数代码生成解决方案一样,它不是一个非常令人满意的解决方案:因此我们继续前进。

于 2010-11-01T03:50:12.763 回答