我知道在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;
系统命名空间是否应该涵盖 System :: Text 和 System :: IO 命名空间?
答案 0 :(得分:4)
您需要使用
one::two::some_variable_or_function
.
运算符用于访问非静态struct
/ class
成员。然后可以通过范围解析运算符::
再次访问静态成员。
如果您只使用using System;
,则可以通过
System::Text
个函数/变量
Text::some_function_or_variable
using
父命名空间并不意味着导入所有子命名空间。
答案 1 :(得分:3)
是的,您需要使用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 :(得分:2)
通常,只有在引用实例成员时才使用点,而在其他任何地方使用::
。因此,要访问名称空间two
中的内容,您可以将其称为one::two::whatever
。
至于using namespace System;
,它会从System
命名空间导入内容。虽然System::IO
和System::Text
位于System
,但它不会将它们直接导入当前命名空间。 AFAIK你可以说using namespace System;
然后引用嵌套命名空间中的一个类,比如IO::Stream
。但是,如果你使用一堆命名空间,这会很快混淆。
答案 3 :(得分:2)
一个:: 2
或
one.two
您需要使用 one :: two 。 one.two是 Java 中包访问的语法
另一个问题是,如果我有一个 声明如
使用命名空间一;
我是否可以访问变量和 任何嵌套命名空间中的函数 像
命名空间二
否,您可以将其用作two::
而不是one::two::
我问,因为在某些程序中我 已经看过(和写过),有 类似的东西:
使用命名空间系统;
使用命名空间System :: Text;
使用命名空间System :: IO;不应该是System命名空间 涵盖System :: Text和System :: IO 命名空间?
否,它们不一样。您必须指定每个子命名空间的 usage 。
答案 4 :(得分:0)
1)one :: two
2)using
父命名空间不会自动扩展任何嵌套命名空间。