Как правильно использовать пространства имен в C ++? - PullRequest
227 голосов
/ 03 сентября 2008

Я пришел из Java-фона, где используются пакеты, а не пространства имен. Я привык помещать классы, которые работают вместе, чтобы сформировать законченный объект в пакеты, а затем использовать их позже из этого пакета. Но сейчас я работаю в C ++.

Как вы используете пространства имен в C ++? Вы создаете единое пространство имен для всего приложения или вы создаете пространства имен для основных компонентов? Если да, то как вы создаете объекты из классов в других пространствах имен?

Ответы [ 15 ]

3 голосов
/ 03 сентября 2008

Обратите внимание, что пространство имен в C ++ на самом деле является просто пространством имен. Они не обеспечивают никакой инкапсуляции, которую делают пакеты в Java, поэтому вы, вероятно, не будете использовать их так много.

3 голосов
/ 03 сентября 2008

Я предпочитаю использовать пространство имен верхнего уровня для приложения и подпространства имен для компонентов.

Способ использования классов из других пространств имен на удивление очень похож на способ в Java. Вы можете использовать «use NAMESPACE», которое похоже на оператор import PACKAGE, например использовать стандартную Или вы указываете пакет в качестве префикса класса, разделенного "::", например станд :: строка. Это похоже на «java.lang.String» в Java.

3 голосов
/ 03 сентября 2008

Вообще говоря, я создаю пространство имен для тела кода, если считаю, что могут быть конфликты имен функций или типов с другими библиотеками. Это также помогает маркировать код, аля boost :: .

2 голосов
/ 03 сентября 2008

Другое отличие между Java и C ++ заключается в том, что в C ++ иерархия пространства имен не нуждается в обработке структуры файловой системы. Поэтому я склонен помещать всю библиотеку многократного использования в одно пространство имен, а подсистемы внутри библиотеки - в подкаталоги:

#include "lib/module1.h"
#include "lib/module2.h"

lib::class1 *v = new lib::class1();

Я бы поместил подсистемы во вложенные пространства имен только в случае возможности конфликта имен.

2 голосов
/ 03 сентября 2008

Я использовал пространства имен C ++ так же, как в C #, Perl и т. Д. Это просто семантическое разделение символов между стандартными библиотечными материалами, сторонними компонентами и моим собственным кодом. Я бы поместил свое собственное приложение в одно пространство имен, а затем повторно используемый компонент библиотеки в другое пространство имен для разделения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...