我听到很多人说C++ 模板非常强大。我似乎仍然不明白使用它们而不是使用继承的优势。
因为我主要是一名 Java 开发人员,所以我认为泛型 和模板 是一回事,但根据 Wikipedia :
Although C++ templates, Java generics, and .NET generics are often considered similar, generics only mimic the basic behavior of C++ templates.
我还想知道在可能只使用类的地方使用模板是否不会混淆代码?
最佳答案
模板和继承的作用不同,比较少见
您可以在其中进行选择。一个非常简单的描述应该
是模板为不同的对象提供了一个通用的实现
接口(interface),其中继承为
不同的实现。在他们通常的角色中,模板强制执行
编译时类型系统的不变量;考虑一些
预模板库,其中 Vector
只能包含 Object*
,
一切都必须从 Object
派生(而且你必须把东西装箱
像 int
)。将一个 int
插入 vector ,并尝试读取一个
double
,是一个运行时错误(或者只是未定义的行为),而不是
而不是编译时错误。
我不同意维基百科的引述:从技术上讲,C++ 模板 和 Java 模板几乎无关。 Java 模板的目标是 提供对类型的不变量的编译时强制执行 系统,这也是C++模板的重要用途之一,但是 使用的机制完全无关,C++ 模板可以是 也用于其他目的。
最后,如果您使用的模板只需要一个简单的类 这份工作,你在滥用模板。只是因为 C++ 有模板 并不意味着您应该使每个类和函数都成为模板。
关于java - 为什么需要模板/泛型?传承还不够吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813548/