/ / Vnorenie medzera v C ++ / CLI - visual-c ++, namespaces, c ++ - cli, vnorené, managed-c ++

Inštalácia menného priestoru v jazyku C ++ / CLI - visual-c ++, namespaces, c ++ - cli, vnorené, managed-c ++

Viem, že hromadenie menných priestorov je povolené v C ++ / CLI. Takže moja otázka je, či máme niečo takéto:

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

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

a musím použiť niektoré funkcie a premenné názov priestoru dva, používam:

one::two

alebo

one.two

Ďalšou otázkou je, že ak mám vyhlásenie, ako je

using namespace one;

Mám prístup k premenným a funkciám v akýchkoľvek vnorených menných priestoroch, ako je

namespace two

Pýtam sa preto, pretože v niektorých programoch, ktoré som videl (a napísal), je niečo ako:

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

Nie je to systém názov priestoru, ktorý má pokrývať System :: Text a System :: IO menné priestory?

odpovede:

4 pre odpoveď č. 1

Musíte použiť

one::two::some_variable_or_function

Na . operátor je pre prístup k non-static struct/class členov. Statické členov je opäť prístupná cez rozlíšenie operátor rozsahu ::.

Ak by ste iba použiť using System;, ste mohli System::Text funkcie/premenných

Text::some_function_or_variable

using nadradenej názvov neznamená import všetky sub-Menné priestory.


3 pre odpoveď č. 2
  1. Áno, musíte použiť one::two namiesto one.two prístup k symboly v vnorená názvov.

  2. Ak ste práve pomocou namespace one; don "t majú automaticky prístup k vnorená názvov.Ste "ll musieť použiť two::

Príklad:

namespace one
{
int i;

namespace two
{
int j;
}
}

Ak používate:

using namespace one;

Váš kód vyzerá takto:

i = 1;
two::j = 2;

Ak používate:

using namespace one;
using namespace one::two;

Váš kód vyzerá takto:

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

2 pre odpoveď č. 3

One::Two

alebo

one.two

Musíte použiť One::Two. One.Two je syntax pre balíček prístup Jáva

Ďalšou otázkou je, že ak mám vyhlásenie ako

používanie namespace, jeden;

Mám prístup k premenné a funkcie vo všetkých vnorených Menné priestory ako

názov priestoru dva

žiadny, môžete využiť ich ako two:: namiesto one::two::

Pýtam sa, pretože niektoré programy som videl (a ukončení), tam "s niečo ako:

pomocou názvov systému;
pomocou názvov System::Text;
pomocou názvov System::IO;

Isn "t systém názvov má zahŕňať priestory názvov System::Text a System::IO?

žiadny, že nie "t rovnaké. Musíte zadať využitie každé dieťa priestoru názvov.


2 pre odpoveď № 4

Vo všeobecnosti používate dot len vtedy, keď ste "znovu s odkazom na člena inštancie, a :: všade inde. Takže k veci váš priestor názvov two, ste "d nazvať one::two::whatever.

Ako pre using namespace System;, to "d dovoz vecí z System priestor názvov. Zatiaľ čo System::IO a System::Text sú v System, to nevyzerá "t importovať ich priamo do aktuálneho priestoru názvov.AFAIK ste "d mohli povedať using namespace System; a potom označovať triedou v rámci vnorená názvov ako, povedzme, IO::Stream. Ale že by dostať mätúce rýchlo, ak použijete banda Menné priestory.


0 pre odpoveď č. 5

1) one::two
2) using rodič namespace doesn "t automaticky rozbaliť vnorené namespace.