模板<class>,会很感激解释</class>

时间:2012-09-22 10:05:25

标签: c++ templates void-pointers

我正在读一本书,其中这个人制作了一个链表 他创建了一个像这样的课程

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?) 那么为什么要首先使用模板?

谢谢!

2 个答案:

答案 0 :(得分:4)

= void*是默认模板参数。即,如果在使用模板void*进行实例化时未指定类型。 NavGraphNode<> n;会使用void*作为额外信息来实例化模板。

但是,您可以明确指定类型,然后使用此类型。例如,您可以使用NavGraphNode<int>向图节点添加一个整数作为额外信息。您还可以使用整个结构或指针来向节点添加更多信息。

答案 1 :(得分:1)

如果有人想在NavGraphNode课程中存储其他信息,并且可以指定他们想要存储的信息类型,那么这是一个扩展点。

NavGraphNode<bool> visitedNavGraphNode;

如果此类客户端对存储任何其他信息不感兴趣,那么客户端可以简单地忽略并创建一个正常实例,如下所示:

NavGraphNode<> simpleNavGraphNode;