我不知道如何使用继承来模拟泛型,我正在查阅Bertand Meyer的文章“泛型与继承”,但我仍然不理解它。我会有一个更清楚的解释。
发布于 2011-06-14 09:47:35
在一些编程语言中,您可以对抽象类型成员使用继承来模拟泛型。下面是一个使用scala的示例。即使你不了解scala,它也是可以理解的。
class Collection {
type T;
//all methods are using T for the contained type.
}
我不确定,但在c++中,类型应该是类型定义。按照这种方法,您可以通过子类型化集合并将类型T指定为A来获得包含类型为A的元素的集合:
class IntCollection extends Collection {
type T = Int;
//...
}
与泛型或模板相比,这种解决方案有一些缺点,但也提供了一些好处。如果你感兴趣,可以考虑阅读这篇文章:http://www.artima.com/weblogs/viewpost.jsp?thread=270195中抽象类型成员与泛型类型参数。同样,你不需要了解scala就能理解这篇文章。编辑:仅引用一句话:至少在原则上,我们可以将每种参数化表示为一种面向对象的抽象形式。希望这能有所帮助
发布于 2011-06-14 19:19:51
泛型只在静态类型化语言(或具有类型提示的语言)中才需要-因为您不想失去难以获得的类型安全性。
如果您的(静态)语言没有这些特性,那么可能是时候考虑一下不同的特性了--使用继承来模拟是一种丑陋的技巧。
或者更好-考虑动态语言和测试驱动开发。你将获得更多的能力(一切都是通用的,不需要输入),测试将代表你的契约--包括具体的例子--这是即使是最好的类型安全抽象也不能做到的。(因为它是抽象的)
发布于 2011-06-14 07:30:03
在一般情况下,您不能这样做。这就是为什么OO语言添加了模板和泛型之类的东西。例如,在引入模板之前,所有在C++中创建通用容器的尝试都失败了,或者几乎完全无法使用。
https://stackoverflow.com/questions/6340326
复制