Шаблон & lt; class = void * & gt ;, был бы признателен за объяснение

Я читаю книгу, где парень делает связанный список
он создает такой класс

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?)
тогда зачем использовать шаблон в первую очередь?

Спасибо!

3

Решение

= void* является аргументом шаблона по умолчанию. То есть, если вы не указали тип при создании шаблона void* используется. NavGraphNode<> n; будет инстанцировать шаблон с помощью void* в качестве дополнительной информации.

Однако вы МОЖЕТЕ явно указать тип, тогда этот тип используется. Например, вы могли бы использовать NavGraphNode<int> добавить целое число в качестве дополнительной информации для вашего графа узла. Вы также можете использовать целые структуры или указатели на них, чтобы добавить больше информации в узел.

4

Другие решения

Это своего рода точка расширения, если кто-то хочет сохранить дополнительную информацию в NavGraphNode класс и может указать, какой тип информации они хотели бы хранить.

NavGraphNode<bool> visitedNavGraphNode;

Если клиент этого класса не заинтересован в хранении какой-либо дополнительной информации, клиент может просто проигнорировать и создать нормальный экземпляр следующим образом:

NavGraphNode<> simpleNavGraphNode;
1

По вопросам рекламы [email protected]