6

我对命名空间有点困惑。这是我所知道的。通常,如果您在代码中有这样的命名空间

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

4

4 回答 4

20

它允许将一个(通常是复杂的)命名空间别名为您选择的命名空间之一。

例如:

namespace fs = boost::filesystem;

... 意味着你可以打电话给 ...

fs::exists( myFilePath );

...无需通过写出的努力...

boost::filesystem::exists( myFilePath );

... 每次。

主要是为了方便。

于 2013-04-14T17:17:42.097 回答
4

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

*我在这里以非常模糊的方式使用可用。在 using 指令之后,将used命名空间中的符号添加到当前命名空间和已使用命名空间层次结构相交的级别。查找将一如既往地从当前命名空间开始,然后向外移动,当它到达层次结构中的公共点时,它将从命名空间中找到原本需要限定的符号。

于 2013-04-14T17:20:59.203 回答
1

每次你看到一个长屁股的名字(或任何一般的表达方式),这都是一个拼写错误甚至容易错过的故意差异的机会。使用最近的术语,声明qi别名是DRY原则的实际应用。

于 2013-04-14T17:34:52.193 回答
1

目的是创建更易于键入和阅读的别名。这里
已经存在关于命名空间别名的问题,所以这可能是重复的。

于 2013-04-14T17:17:30.223 回答