Я читаю книгу, где парень делает связанный список
он создает такой класс
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*
является аргументом шаблона по умолчанию. То есть, если вы не указали тип при создании шаблона void*
используется. NavGraphNode<> n;
будет инстанцировать шаблон с помощью void*
в качестве дополнительной информации.
Однако вы МОЖЕТЕ явно указать тип, тогда этот тип используется. Например, вы могли бы использовать NavGraphNode<int>
добавить целое число в качестве дополнительной информации для вашего графа узла. Вы также можете использовать целые структуры или указатели на них, чтобы добавить больше информации в узел.
Это своего рода точка расширения, если кто-то хочет сохранить дополнительную информацию в NavGraphNode
класс и может указать, какой тип информации они хотели бы хранить.
NavGraphNode<bool> visitedNavGraphNode;
Если клиент этого класса не заинтересован в хранении какой-либо дополнительной информации, клиент может просто проигнорировать и создать нормальный экземпляр следующим образом:
NavGraphNode<> simpleNavGraphNode;