3

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

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

谢谢!

4

2 回答 2

4

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

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

于 2012-09-22T10:08:47.130 回答
1

NavGraphNode如果有人想在类中存储额外的信息并且可以指定他们想要存储的信息类型,这是一种扩展点。

NavGraphNode<bool> visitedNavGraphNode;

如果此类的客户端对存储任何附加信息不感兴趣,则客户端可以简单地忽略并创建一个普通实例,如下所示:

NavGraphNode<> simpleNavGraphNode;
于 2012-09-22T10:12:02.443 回答