Я знаю, що введення просторів імен дозволено в 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
Так, вам потрібно користуватися
one::two
замістьone.two
для доступу до символів у вкладеному просторі імен.Якщо ви просто використовуєте
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
батьківський простір імен не розширює автоматично будь-яку вкладену область імен.