我正在读一本书,其中这个人制作了一个链表 他创建了一个像这样的课程
template < class extra_info = void*>
class NavGraphNode : public GraphNode
{
protected:
//the node's position
Vector2D m_vPosition;
extra_info m_ExtraInfo;
public:
/*INTERFACE OMITTED */
};
他解释说extra_info可以是例如枚举值或指针 对于节点与之配对的实例。但我真的不明白第一行, 阅读例如 http://www.cplusplus.com/doc/tutorial/templates/ 看来如果你指定了类型(为什么不用void * extra_info?) 那么为什么要首先使用模板?
谢谢!
答案 0 :(得分:4)
= void*
是默认模板参数。即,如果在使用模板void*
进行实例化时未指定类型。 NavGraphNode<> n;
会使用void*
作为额外信息来实例化模板。
但是,您可以明确指定类型,然后使用此类型。例如,您可以使用NavGraphNode<int>
向图节点添加一个整数作为额外信息。您还可以使用整个结构或指针来向节点添加更多信息。
答案 1 :(得分:1)
如果有人想在NavGraphNode
课程中存储其他信息,并且可以指定他们想要存储的信息类型,那么这是一个扩展点。
NavGraphNode<bool> visitedNavGraphNode;
如果此类客户端对存储任何其他信息不感兴趣,那么客户端可以简单地忽略并创建一个正常实例,如下所示:
NavGraphNode<> simpleNavGraphNode;