【发布时间】:2011-10-12 09:58:23
【问题描述】:
我听到很多人说C++ 模板非常强大。我似乎仍然不明白使用它们而不是使用继承的好处。
由于我主要是一名 Java 开发人员,我认为 generics 和 templates 是一回事,但根据 Wikipedia:
尽管 C++ 模板、Java 泛型和 .NET 泛型通常被认为是相似的,但泛型只是模仿 C++ 模板的基本行为。
我还想知道,在可能只使用类的地方使用模板是否不会混淆代码?
【问题讨论】:
-
你用过
std::vector吗? -
您不需要模板/泛型(毕竟,它们只是在 java 1.5 中引入的),但是它们提供了不错的功能。类型安全的集合(例如 STL 中的 std::vector )就是其中之一:您将如何仅使用继承来实现一个? (例如,
Vector的add方法需要接受Object的任何子类)。这种参数化在没有“根类”的 C++ 中更为重要(如 java 中的Object)。 -
这是一个完全有效的问题
-
由于这个问题已经结束,我想指出 C++ 模板允许“静态多态性”(参见 CRTP),这是您在 Java 中无法做到的。此外,您可以有整数参数,因此您可以在编译时指定类数组的大小,例如,不需要使用动态分配的内存。在 C++0x 中,数组类使用 this。
-
我认为,如果您在聊天中提出问题(如果您愿意的话)或者如果您有适合 Q/A 格式的内容:“我知道怎么写某某与继承,模板会是什么样子,我会获得/权衡什么”。
标签: java c++ templates generics inheritance