требуется диспетчер пространств имен или xsltcontext



Автор Грешник чОрный задал вопрос в разделе Другие языки и технологии

вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю)) и получил лучший ответ

Ответ от ?????? Зелёный змий ??????[гуру]
В принципе любая пара скобочек {} определяет пространство имен. Любые переменные объявленные в этом пространстве не будут видны из другого места. Так было еще в просто СИ, но в нем не было такого понятия "пространство имен". Вместо этого использовалось понятие "область видимости переменной". В С++ появилось namespace - пространство имен. Для того чтобы глобальное пространство имен распилить на независимые зоны во избежание конфликтов имен переменных и функций. При этом к памяти, как утверждает предыдущий постер, это никакого отношения не имеет. Это нужно компилятору чтобы не путать одни сущности с другими.
Например
namespace foo
{
int Var; // глобальная переменная
void Func(int Var); // функция
}
namespace ess
{
int Var; // глобальная переменная
void Func(int Var); // функция
}
Несмотря на то что разные переменные и функции названы одинаково, компилятор их никогда не перепутает, потому что они лежат в разных пространствах имен. Доставать их следует используя имя пространства.
foo::Var; // переменная из одного пространства
ess::Var; // переменная из другого пространства
В функциями так же. Если страдаете ленью и не хочется лишний раз писать спецификатор имени, то можно воспользоваться директивой using namespace foo; Тогда компилятор будет знать, что имена нужно искать не только в глобальном пространстве, но и в указанном.
Если указать список пространства (как в примере)
using namespace foo;
using namespace ess;
Тогда уже можно запутать компилятор, он найдет в обоих пространствах нечто подходящее, а что требуется вам - уже не понятно. Так что директивой using namespace нужно тоже пользоваться аккуратно (либо не пользоваться без необходимости) .
Впрочем можно указать не все пространство имен, а только его часть.
using namespace foo::Func;
namespace открыты и расширяемы. Открыты - значит, что ко всему что определено в них можно получить доступ из другого места.
Расширяемы - значит что содержимое пространства имен не обязательно должно быть в одном файле, и всегда пространство имен можно чем нибудь дополнить.
namespace foo
{
int Var2; // другая глобальная переменная, которую добавили в уже существующее пространство
}
Но есть еще анонимные пространства имен. Они просто не содержат имени. С ними все наоборот
// file.cpp
namespace
{
/*
Все определенное здесь будет видно только в пределах этого файла,
и больше нигде не засветиться
*/
int Var;
} // namespace end
void fun()
{
Var = 50; // залезли в анонимный namespace
}
При объявлении класса автоматически образуется пространство имен, но уже со своей спецификой. Оно не расширяемо, т. е. его начинка определяется только тем, чтобы объявлено в классе. И с помощью директив public, protected, private можно регулировать доступ к отдельным его элементам.

Ответ от Ildar[гуру]
Пространство имен - это область памяти, в которой сосредоточены определенные данные (переменные, классы и т. д.). Без объявления этого же пространства имен в коде невозможно использовать эти данные в программе. Придуманы эти пространства, чтобы отгородить определенные данные от данных других пространств, чтобы их не путать.
Например, есть пространство имен std, где сосредоточены такие вещи cout, cin,string,vector и т. д. , то есть стандартные данные языка. Мы говорим компилятору, что будем использовать это пространство через команду using namespace std;.Чтобы определить свое пространство имен, используем след. синтаксис:
namespace имя{
//тут твои данные
}
Затем объявляем его в программе:
using namespace имя;
Либо используем данные след. образом:
//пример
cout << имя:: переменная << endl;
имя:: функция (а, б) ;
Вот как то так
В общем пространства имен нужны, чтобы не путать данные одного пространства с другими, как бы "разграничать"их. Допустим у тебя в исходном коде определены две ф-ции с одним названием, но в разных пространствах. И ты можешь использовать их обоих, т. к. компилятор различит их по пространствам, которым они принадлежат.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю))
Пространство имён программирование на Википедии
Посмотрите статью на википедии про Пространство имён программирование
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*