在C++中分配命名空间

7

我有些关于命名空间的困惑。以下是我了解到的内容。通常,如果您在代码中有以下命名空间

namespace foo
{ 
   namespace gfoo
   {
       class apple
       {..};
   }
}

现在使用以下代码
using namespace foo::gfoo;

您可以直接访问类apple,无需在类前输入名称空间,例如foo::gfoo::apple

现在我看到一些代码示例如下:

namespace qi = boost::spirit::qi

然后在方法中,它被用作

void someMethod()
 {
   using qi::char_
 }

现在我的问题是,像 namespace qi = boost::spirit::qi 这样做的目的是什么?它可以让你使用更简短的名称来引用命名空间中的内容,从而使代码更加简洁易懂。

什么是命名空间别名? - masoud
闲置(也称“可用性”...) - Zorawar
4个回答

22

它被称为命名空间别名。它允许您缩短和重命名现有命名空间,使其更易于阅读。例如:

// original
boost::filesystem::exists("/tmp/file.txt");

// aliased
namespace fs = boost::filesystem;
fs::exists("/tmp/file.txt");

4
使用using指令可以使所使用的命名空间中的名称可用*,而命名空间别名为命名空间创建另一个名称,它只提供对现有命名空间的不同(希望更短或更简单)名称,但您仍需要限定或使用using指令来使其可用

*我在此处非常模糊地使用了“可用”。在使用指令之后,将在当前命名空间和使用的命名空间层次结构相遇的级别上添加用于命名空间中的符号。查找始终从当前命名空间开始,然后向外移动,当它到达层次结构中的公共点时,将找到来自需要合格的命名空间的符号。


+1 但也许您可以提一下,ADL 忽略 using 指令? - TemplateRex

1
该目的是创建易于键入和阅读的别名。
已经有关于命名空间别名的问题在这里,因此这可能是重复的。

1
每当你看到一个超长的名称(或任何表达方式),都有可能出现拼写错误,甚至是易于忽略的有意差异。用相对较新的术语来说,声明qi别名就是DRY原则在实践中的体现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接