Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доступ к переменной внутри namespace из другого модуля

376
16 декабря 2009 года
Absolut
220 / / 22.11.2002
Можно ли получить доступ к глобальной с точки зрения пространства имен переменной из другого модуля не объявляя явно в этом пространстве имен ее как внешнюю ?

Поясню на примере:
В модуле one есть глобальная переменная g типа G;
Из модуля two можно получить доступ к этой переменной путем записи "extern G g;"
(То есть в самом хедере модуля one нигде явно не сказано о переменной g).
Теперь представим, что модуль one объявлен в пространстве имен N, а two - нет.
Как получить доступ к переменной g из модуля two ?

У меня, например, никаким другим способом, кроме явного указания в хедере модуля one (т.е. внутри пространства имен N) записи "extern G g;" (и включением этого хедера в two), не получилось. Есть ли варианты, или это единственно правильный ?
55K
16 декабря 2009 года
Genadyi
2 / / 16.12.2009
Добрый вечер, а если использовать функцию с параметром? Тогда отпадет необходимость плодить глобальные переменные. Кажисть так будет красивше да и функцию можно использовать из разных мест проги.
376
16 декабря 2009 года
Absolut
220 / / 22.11.2002
В любом случае существует некий верхний уровень, который можно считать глобальным :)
288
17 декабря 2009 года
nikitozz
1.2K / / 09.03.2007
По-моему по-другому никак. А чем вариант с включением в хедер не устраивает? И действительно ли есть необходимость сделать эту переменную глобальной?

Если не устраивает тот факт, что это переменная будет видна любому модулю, который будет включать "one.h", можно, например сделать для пространства имен два интерфейса. Но смысл тогда в глобально переменной?
5
17 декабря 2009 года
hardcase
4.5K / / 09.08.2005
Зачем вообще делать глобальные переменные в С++? :confused:
376
17 декабря 2009 года
Absolut
220 / / 22.11.2002
Цитата: nikitozz
А чем вариант с включением в хедер не устраивает?


В принципе устраивает. Просто хотелось понять почему без пространства имен в хедер можно ничего не писать. А с пространством уже так не получается.
Сначала например пытался достучатся до переменной по аналогии с "беспространственным" вариантом, через :

 
Код:
extern N::G N::g;

Но линкер ругнулся.
376
17 декабря 2009 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
Зачем вообще делать глобальные переменные в С++? :confused:



А скажем, как Вы реализуете разделение доступа к консоли из разных потоков, если не объявите глобальный мютекс ?

87
17 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
На границе C++ и C проходится хитрить... Вместо глобальной переменной можно использовать статическую переменную определенного класса. Но лучше синглтоны, наверное. Хотя их критикуют, но тут не вижу альтернативы.
5
17 декабря 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Absolut
как Вы реализуете разделение доступа к консоли из разных потоков, если не объявите глобальный мютекс ?



Цитата: Kogrom
Вместо глобальной переменной можно использовать статическую переменную определенного класса. Но лучше синглтоны, наверное.

Консоль - одна. Поэтому она отлично попадает под паттерн "синглтон", хотя с другой стороны, можно сделать и статические методы.
А вместо мьютекса можно и семафором обойтись.

260
17 декабря 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: hardcase
А вместо мьютекса можно и семафором обойтись.



А почему именно "можно обойтись", в чем доминирующее преимущество семафора?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог