我定义了一个类(class)
template <class T> class NodeMap {
NodeMap(int n, T defaultEntry = NULL);
virtual ~NodeMap();
T& operator[](const node& u);
...
}
它将
node
类型的对象映射到参数类型T
的对象。现在,我想拥有一个
Matching
类,它实际上是一个NodeMap<node>
。为了方便起见,我想添加isProperMatching(Graph& G)
和match(node u, node v)
之类的方法。 Matching
可以从NodeMap<node>
继承吗?是否可以使用固定的模板参数扩展模板类(如果可以,是个好主意)吗? 最佳答案
到目前为止,您所显示的代码告诉我您在做什么,您可能会遇到以下情况:
Nodemap
专用于T=node
,以包括您想要的其他方法。为了方便起见,您可以将def Nodemap<node>
键入Matching
。但是,这可能会添加一些与非专业模板中的方法重复的代码。 Nodemap<node>
派生。如果您设计Nodemap
使其成为适当的基类,则这是一种有效的方法。虚拟析构函数建议您已经这样做了,尽管可能根本不需要使方法成为虚拟方法。 Nodemap<node>
派生或专门化我会考虑前两种的混合方法:创建一个包含
NodeMapBase
和NodeMap
的通用功能的基类模板(我将其称为Matching
),然后从相应的基类模板派生NodeMap
模板(可能无需添加功能),并从Matching
导出NodeMapBase<node>
。如果您看一下MSVC的标准库实现,将会发现很多东西。关于c++ - 在固定模板参数的同时扩展模板类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13722941/