类名可以用作命名空间吗

Can a class name be used as a namespace?

本文关键字:命名空间      更新时间:2023-10-16

我记得有人告诉我C++类有自己的命名空间,类名可以用作范围解析的命名空间,比如:

// 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() {}

但我在书中既找不到解释,也找不到例子。短暂的谷歌搜索也是一条死胡同这是真的吗

不,名称空间和类是不同的。

但是,名称空间和类都引入了作用域,可以使用作用域解析运算符::来引用该作用域。

using namespace N;声明只能应用于命名空间。对一个班级来说,做类似的事情是不可能的。只能对Example中的特定名称x执行using Example::x;,以便逐一导入。

当提供成员函数体越界时,必须编写Example::Private(),别无选择。

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

您可以按照此处的说明使用using指令。

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

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
}

不过一定要小心。"使用"过多"可能会对你和那些继承你代码的人造成真正的伤害。