c++ - C++ 中的嵌套命名空间

标签 c++ namespaces

当有嵌套的命名空间和对象声明时,我很困惑该怎么做。

我正在移植一些链接到具有一些命名空间的静态库的代码。

我所说的例子:

namespace ABC {

    namespace XYZ {

        //STUFF
    }
}

如何在代码中声明一个位于命名空间 XYZ 中的对象?

如果我尝试:

XYZ::ClassA myobject;

或:

ABC::XYZ::ClassA myobject;

或:

ABC::ClassA myobject;

我明白了

does not name a type

错误,即使 ClassA 确实存在。

这里有什么合适的?

最佳答案

这取决于你已经使用的命名空间:

如果您不在命名空间或另一个不相关的命名空间中,则必须指定整个路径 ABC::XYZ::ClassA

如果您在 ABC 中,则可以跳过 ABC 并直接编写 XYZ::ClassA

另外,值得一提的是,如果要引用不在命名空间(或“根”命名空间)中的函数,可以在其前面加上 :::

例子:

int foo() { return 1; }

namespace ABC
{
  double foo() { return 2.0; }

  void bar()
  {
    foo(); //calls the double version
    ::foo(); //calls the int version
  }
}

关于c++ - C++ 中的嵌套命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199139/

相关文章:

c++ - 如何使用 sscanf 扫描由 `/` 分隔的两个字符串?

java - Java 和 C++ 之间的进程间通信

c++ - 为什么 “std::isdigit”在Windows上的C++中报告 “no matching overloaded function”

java - jackson fastxml 将命名空间添加到根元素

python + libclang;来回迭代 : binding field comments to the field

c++ - 使用 SDL 的智能指针

c# - 项目无法识别包含在不同程序集中的构造函数

php - Doctrine、命名空间和自动加载实体

c++ - 如何在 C++ 中构造带参数的对象

c++ - 命名空间全局变量丢失值(C++)