【问题标题】:Template <class = void*>, would appreciate an explanation [closed]模板 <class = void*>,希望得到解释 [关闭]
【发布时间】:2012-09-22 10:05:24
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 从您链接到的页面:“也可以为类模板参数设置默认值或类型。”。这就是= void* 部分。

标签: c++ templates void-pointers


【解决方案1】:

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

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

【讨论】:

  • 这很快,谢谢!完美的答案(虽然它不会让我接受)
【解决方案2】:

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

NavGraphNode<bool> visitedNavGraphNode;

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

NavGraphNode<> simpleNavGraphNode;

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 2010-11-06
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2023-04-07
    • 2012-08-14
    • 2010-09-09
    相关资源
    最近更新 更多