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ď č. 1Musí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
Áno, musíte použiť
one::two
namiestoone.two
prístup k symboly v vnorená názvov.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.