Конгер Д.
Физика для разработчиков компьютерных игр
стр. 479

Пространства имен

При написании сложных программ, в частности, игр, часто используются библиотеки, созданные разными компаниями. Иногда в этих библиотеках встречаются функции или классы с совпадающими именами. В C++ есть удобный метод различения таких функций и классов. Этот метод основан на применении пространств имен (namespaces). Пространство имен позволяет объединять функции и классы, содержащиеся в библиотеке. Для обращения к членам пространства имен используется операция расширения области видимости.

Например, в этой книге мы создавали платформу физического моделирования, которая представляет собой библиотеку. Ко всем функциям и классам этой библиотеки можно обращаться через пространство имен библиотеки. Это пространство имен называется pmframework.

Пространство имен объявляется с помощью ключевого слова namespace. Например, все в пространстве имен pmframework объявляется внутри такого оператора:

namespace pmframework {

// Здесь перечисляются классы, функции и другие элементы

}

Все классы, функции и другие элементы пространства имен перечисляются внутри фигурных скобок после имени этого пространства имен.

Чтобы сообщить программе об использовании пространства имен, нужно поместить в начале ее срр-файла оператор using, например, такой:

using pmframework;

Если такой оператор вставить в начало срр-файла, то в этом файле можно обращаться ко всем элементам пространства имен pmframework просто по их именам.

Предположим, что в вашей программе используются библиотека физического моделирования и библиотека для работы с графикой. В библиотеке физического моделирования содержится класс vector_3d. Представьте себе, что в библиотеке для работы с графикой тоже есть такой класс. Как сообщить программе, какой из двух классов вам нужен?

С помощью оператора расширения области видимости. Этот оператор всегда позволяет различить две функции или два класса с одинаковыми именами. Если эти функции или классы находятся в разных пространствах имен, различить их очень просто, например:

pmframework::vector_3d vectorVariable; a_graphics_lib::vector_3d anotherVectorVariable;



Новости
Геймеры собирают деньги на помощь русским сиротам
Сервис Humble Store и компания Tripwire Interactive поддержат организацию Change30. Британцы предоставляют помощь русским сиротам.
Слух: На E3 2018 покажут Cyberpunk 2077
Крупное польское видеоигровое издание GRYOnline сообщило о том, что, согласно их собственным источникам в компании, CD Projekt Red готовит к E3 2018 новый трейлер Cyberpunk 2077.