(c++) 你能从外部源嵌套命名空间吗

(c++)can u nest namespaces from extern sources

我有几个 header 的命名空间都遵循特定的命名模式

现在他们的真实姓名前面都有一个前缀,例如

namespace Xname{//inside name.h
  //stuff here
};
namespace Xsomething{//inside something.h
  //stuff here
};

现在这对我的 atm 使用非常有用,但我的想法是再创建一个 header 包含一个命名空间,该命名空间将收集所有其他命名空间,以便我可以像这样访问它们:

#include "mainheader.h"
X::name::stuff
X::something::stuff

这样我以后就可以像这样

更改新header的命名空间名称
X::name::stuff
hello::name::stuff

不能像这样嵌套它们:

namespace x{
   namespace something{
     //stuff
   }
}

您可以在彼此内部定义新的命名空间like so

#include <iostream>

namespace Xname{//inside name.h
  const int x = 0;
};
namespace Xsomething{//inside something.h
  const int y = 1;
};

// Your other header
namespace X {
namespace name = Xname;
namespace something = Xsomething;
}

int main() {
  std::cout << X::name::x << "\n";
  std::cout << X::something::y << "\n";
}

如果我没理解错的话,你可以使用 using namespace 指令。这是一个例子:

namespace Xname {
    struct foo {};
}

namespace X {
    namespace name {
        using namespace Xname;
    }
}

int main()
{
    Xname::foo f1;       // original
    
    X::name::foo f2;     // alternative
}