Russian Qt Forum
Ноябрь 23, 2024, 04:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по Namespace.  (Прочитано 6582 раз)
QDgara
Гость
« : Декабрь 25, 2006, 12:33 »

Есть нестоклько неймспейсов Name1, Name2, Name3. Для каждого свой h файл и сpp файл. Вопрос в том: как в Name1 добавить Name2 и Name3?

добавлено спустя 32 минуты:

 Пока только нашёл вариант с перекрётным инклудом. В Name2.h и Name3.h добавляем #include <Name1.h> и помещаем неймспейсы в Name1.
А Name2.h и Name3.h инклудить надо в Name1.h

добавлено спустя 57 секунд:

 Мне почему-то этот способ не подуше, есть ещё варианты?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Декабрь 25, 2006, 12:40 »

ну можно так

using namespace NAME1

или так

NAME1::MethodAny
Записан
QDgara
Гость
« Ответ #2 : Декабрь 25, 2006, 13:02 »

А где тут добавления одного неймспейса в другой? Я только вижу обьяление Name1 , как неймспейс по-умолчанию.
Записан
Вудруф
Гость
« Ответ #3 : Декабрь 25, 2006, 13:06 »

Не понял вопроса...
Тебе что именно нужно? Вложенные namespace?
Код:

namespace Name1
{
  namespace Name2
  {
    //Some code
  }
}


Обращение к Name1 из Name2?
Код:

namespace Name2
{
  //...
  Name1::<some_object>;
}
Записан
QDgara
Гость
« Ответ #4 : Декабрь 25, 2006, 16:40 »

Цитата: "Вудруф"
Не понял вопроса...
Тебе что именно нужно? Вложенные namespace?

Да. Именно вложенные namespace, но только чтоб каждый namespace в отдельном заголовочном файле определять. Это возможно?
Записан
Вудруф
Гость
« Ответ #5 : Декабрь 25, 2006, 17:06 »

Зачем их определять в отдельном заголовочном файле? Они объявляются в месте использования, пусть даже и несколько раз...
1.h
Код:

namespace Name1
{
  namespace Name2
  {
    void some_func1 ();
  }
}

2.h
Код:

namespace Name1
{
  namespace Name2
  {
    void some_func2 ();
  }
}


Итого, когда мы подключим 1.h, мы будем видеть только первую функцию. Когда подключим оба файла - обе функции. Проблем это не вызовет.

Рассмотрим такой вариант:
1.h
Код:

namespace Name2
{
  void some_func1 ();
}

2.h
Код:

namespace Name1
{
  namespace Name2
  {
    void some_func2 ();
  }
}

В такой ситуации, подключив оба h-файла, Name2 будут различными. Один в Name1, другой - глобальный. Это можно обойти так:
Код:

namespace Name1
{
#include "1.h"
}
#include "2.h"

Но это уже изврат.

добавлено спустя 1 минуту:

 Суть-то тут в том, что namespace не является объектом. Это всего лишь средство разделения области видимости.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.247 секунд. Запросов: 23.