/ / Простір імен, що вкладаються в C ++ / CLI - visual-c ++, простори імен, c ++ - cli, вкладені, керовані-c ++

Область імен вкладені в C ++ / CLI - visual-c + +, простору імен, c ++ -cli, вкладені, керовані-c + +

Я знаю, що введення просторів імен дозволено в C ++ / CLI. Тож моє питання, чи є у нас щось подібне:

...
namespace one
{
// blah blah blah
// ...

namespace two
{
// another set of blah blah blah
// ...
}
}

і мені потрібно використовувати деякі функції та змінні в простір імен два, чи використовую я:

one::two

або

one.two

Інше питання полягає в тому, що якщо у мене є така заява, як

using namespace one;

чи маю я доступ до змінних та функцій у будь-яких вкладених просторах імен, як-от

namespace two

Я прошу, бо в деяких програмах, які я бачив (і писав), є щось на зразок:

using namespace System;
using namespace System::Text;
using namespace System::IO;

Хіба що Система Простір імен, який повинен охоплювати Система :: Текст і Система :: IO простори імен?

Відповіді:

4 для відповіді № 1

Вам потрібно використовувати

one::two::some_variable_or_function

The . Оператор призначений для доступу до нестатичних struct/class члени. Потім статичні члени можуть знову отримати доступ через оператор роздільної здатності ::.

Якби ти тільки користувався using System;, ви можете отримати доступ до System::Text функції / змінні за

Text::some_function_or_variable

using батьківський простір імен не передбачає імпорту всіх просторів імен.


3 для відповіді № 2
  1. Так, вам потрібно користуватися one::two замість one.two для доступу до символів у вкладеному просторі імен.

  2. Якщо ви просто використовуєте namespace one; Ви не матимете автоматичного доступу до вкладеного простору імен. Вам доведеться користуватися two::

Приклад:

namespace one
{
int i;

namespace two
{
int j;
}
}

Якщо ви використовуєте:

using namespace one;

Ваш код виглядає так:

i = 1;
two::j = 2;

Якщо ви використовуєте:

using namespace one;
using namespace one::two;

Ваш код виглядає так:

i = 1; //Compile fails if no "using namespace one".
j = 2;

2 для відповіді № 3

один два

або

one.two

Вам потрібно використовувати один два. one.two - синтаксис для пакет доступ в Java

Інше питання, що якщо у мене є твердження, як

використання простору імен один;

чи маю я доступ до змінних та функцій у будь-яких вкладених просторах імен подобається

простір імен два

Немає, Ви можете використовувати їх як two:: замість one::two::

Я прошу, бо в деяких програмах я бачили (і писали), там «с щось на зразок:

використання системи простору імен;
використання простору імен System :: Text;
використання простору імен System :: IO;

Хіба що не слід вважати простором імен системи охоплюємо Систему :: Текст і Система :: IO простори імен?

Немає, вони не однакові. Вам потрібно вказати використання кожного простору імен кожної дитини.


2 для відповіді № 4

Як правило, ви використовуєте крапку лише тоді, коли ви "посилаєтесь на члена екземпляра, і :: скрізь. Отже, щоб отримати доступ до матеріалів у вашому просторі імен two, ви б називали це one::two::whatever.

Що стосується using namespace System;, це "імпортувати речі з System простір імен. Поки System::IO і System::Text знаходяться в System, він не імпортує їх безпосередньо в поточний простір імен. AFAIK ви не зможете сказати using namespace System; а потім посилайтеся на клас у вкладеному просторі імен як, скажімо, IO::Stream. Але це швидко заплутається, якщо ви використовуєте купу просторів імен.


0 для відповіді № 5

1) один :: два
2) using батьківський простір імен не розширює автоматично будь-яку вкладену область імен.