静态类型语言如何在没有泛型的情况下处理?

时间:2010-10-07 09:50:14

标签: generics language-design static-typing

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

用户是否只是在场所投放?是否有一些特殊的基础集合,如列表和词典,允许这些类型是通用的?

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

5 个答案:

答案 0 :(得分:2)

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

但是,数组(列表)被视为复合类型而不是单一类型。例如,你可以拥有一系列短裤,但你不能把它当作一系列字符,甚至是多头。

这在C中并不是一个很大的问题,但有时不方便。它确实代表了40年前的权衡,将其置于背景中。

答案 1 :(得分:1)

下载java 1.4或1.3并亲自试用。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

在v2.0之前,C#不支持泛型。是的,那么你需要从Object进行大量的投射。

我想VB.Net也是如此。