嵌套命名空间如何工作?

时间:2011-12-17 16:39:41

标签: c++

Arguments类在v8::internal命名空间

中定义

https://github.com/joyent/node/blob/master/deps/v8/include/v8.h#L113

namespace v8 {
// ...
namespace internal {
class Arguments;
}
// ...
}

但是,稍后在v8命名空间中使用它来访问它

https://github.com/joyent/node/blob/master/src/handle_wrap.h#L38

using v8::Arguments;

这引出了我的问题“嵌套命名空间如何工作?”。

1 个答案:

答案 0 :(得分:4)

他们按照您的预期工作。考虑单级命名空间(例如std::)已嵌套在全局namesapce ::中。除非应用using namespace std;指令,否则只有std名称在全局名称空间中注册,而std::中的符号不​​会直接对全局名称空间可见。

添加第二层并应用相同的逻辑。 v8::internal中的符号无法在全局命名空间或v8::中直接访问,但using namespace v8;指令将提取v8符号,包括internal::(命名空间名称,而不是它的内容)进入全局命名空间等。

您肯定知道,还有其他方法可以将单个名称拉入另一个名称空间:using指令和typedef指令。除非有另一个名为v8::Arguments的类,否则有一个typedef或using指令将v8::internal::Arguments拉为v8:: v8::Arguments


快速浏览node.js中的V8源代码,确实在line 1946的命名空间v8::Arguments中定义了一个名为v8::的类,并且命名空间v8::internal::不是开到line 3709