我正在研究從遊戲AI通過示例書的工作代碼,並有一部分我不明白。我可以依靠模板類型嗎?
有
template <class node_type, class edge_type>
class SparseGraph
{ ... };
和
int SparseGraph<node_type, edge_type>::AddNode(node_type node)
{
if (node.Index() < (int)m_Nodes.size())
...
}
怎麼能node.Index()
叫什麼名字?
也有類
class GraphNode
{
public:
...
int Index()const{return m_iIndex;}
....
};
和圖形與此類
typedef SparseGraph<GraphNode, GraphEdge> NavGraph;
NavGraph * m_pGraph;
讓我明白了什麼node.Index()
做創建,但 我怎麼能叫node.Index()
雖然沒有保證node_type
是GraphNode
。
如果node_type
不是GraphNode
?
希望你能理解我的問題。
我想你需要一本好書,告訴你模板是如何工作的。 「鴨子打字」是關鍵字。 – Xeo 2011-05-31 19:45:45
@Xeo:如果您不想閱讀由熟悉動態編程語言的人撰寫的大量博客文章,請參閱「參數多態性」。 :-P – ildjarn 2011-05-31 20:00:17
@ildjarn:但鴨子打字聽起來更好。 :( – Xeo 2011-05-31 20:46:35