【问题标题】:Assigning namespaces in C++在 C++ 中分配命名空间
【发布时间】:2013-04-06 18:44:18
【问题描述】:

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

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 的目的是什么

【问题讨论】:

标签: c++ c++11 namespaces


【解决方案1】:

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

例如:

namespace fs = boost::filesystem;

... 表示您可以调用 ...

fs::exists( myFilePath );

...无需费力写出...

boost::filesystem::exists( myFilePath );

...每次。

主要是为了方便。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • +1 但也许您可以提到 ADL 忽略 using 指令?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 2011-01-02
        • 2016-07-26
        • 2010-09-28
        相关资源
        最近更新 更多