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 に答える