class 名称可以用作命名空间吗?

Can a class name be used as a namespace?

我记得有人告诉我 C++ classes 有自己的命名空间,class 名称可以用作作用域解析的命名空间,如下所示:

// Example.h
class Example {
    void Private();
public:
    void Public();
}

并且,稍后以类似于此的方式:

// Example.cpp
#include "Example.h"
using /*namespace*/ Example;
void Private() {}
void Public() {}

而不是:

// Example.cpp
#include "Example.h"
void Example::Private() {}
void Example::Public() {}

但我在我的书中既找不到解释也找不到这方面的例子。简短的 Google 搜索也是一个死胡同。 这是真的吗?

是的,每个 class 都有自己的命名空间,class 声明的所有部分都属于该命名空间。

您可以按照说明使用 using 指令 ​​here

需要注意的是,您不能声明与class同名的名称空间,如下所示:

namespace fubar
{
    class snafu
    {
        ...
    };
}
// Cannot do stuff below (ERROR)
namespace fubar::snafu;
{
    // this is not valid, once a class always a class
    // once a namespace, always a namespace
    // a class makes a namespace also but never JUST a namespace
}

不过要小心。 'Using' 过多会对您和那些继承您代码的人产生影响。

不,命名空间和 classes 是不同的。

但是,命名空间和 classes 都引入了一个 scope,可以使用范围解析运算符 :: .

来引用它

using namespace N; 声明只能应用于名称空间。不可能为 class 做类似的事情。您只能在 Example 中对特定名称 x 执行 using Example::x; 以将它们一一导入。

外联提供成员函数体时,必须写Example::Private(),没办法