我可以依赖模板类型吗?

rel*_*xxx 1 c++ templates

我正在通过示例书查看来自Game AI的工作代码,并且有一部分我不明白.

template <class node_type, class edge_type>   
class SparseGraph                                 
{ ... };
Run Code Online (Sandbox Code Playgroud)

int SparseGraph<node_type, edge_type>::AddNode(node_type node)
{
  if (node.Index() < (int)m_Nodes.size())
...
}    
Run Code Online (Sandbox Code Playgroud)

怎么node.Index()称呼?

还有课

class GraphNode
{  
public:
...   
  int  Index()const{return m_iIndex;}
....
};   
Run Code Online (Sandbox Code Playgroud)

并使用此类创建图形

typedef SparseGraph<GraphNode, GraphEdge> NavGraph;
NavGraph * m_pGraph;
Run Code Online (Sandbox Code Playgroud)

让我明白了什么node.Index()做的,但我怎么能叫node.Index()虽然没有保证node_typeGraphNode.

如果node_type不是GraphNode

希望你理解我的问题.

Pup*_*ppy 7

如果node_type不是GraphNode,那么你的编译器会砸你并抛出一个错误.但是,如果您的类依赖于Index函数,那么您应该将其记录为一个要求,并且GraphNode的任何替换都必须提供它,可能具有一些预期的语义.