将命名空间声明为宏 - C++

Nav*_*K N 6 c++ macros namespaces

在标准库中,我发现命名空间std被声明为宏.

#define _STD_BEGIN  namespace std {
#define _STD_END        }
Run Code Online (Sandbox Code Playgroud)
  1. 这是使用命名空间时的最佳做法吗?
  2. 宏在声明中Microsoft Visual Studio 9.0\VC\include\yvals.h.但是我找不到包含这个的STL文件.如果不包括在内,它是如何使用的?

有什么想法吗..?

GMa*_*ckG 6

可能不是最佳实践,因为与香草namespace宣言相比,它可能难以阅读.也就是说,记住规则并不总是普遍适用,我确信有一些情况下宏可能会大大清理.

"但是我找不到包含这个的STL文件.如果没有包含它,它是如何使用的?".

使用此宏的所有文件都yvals.h以某种方式包含.例如<vector>包括,<memory>包括<iterator>,包括<xutility>,包括<climits>,包括,包括,包括<yvals.h>.链条可能很深,但确实包含它.

我想澄清一下,这只适用于标准库的这种特定实现; 这绝不是标准化的.