类名可以用作命名空间吗?

时间:2015-11-29 00:02:47

标签: c++ class scope namespaces header-files

我记得被告知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() {}

但是我在书中找不到任何解释或示例。谷歌的简短搜索也是一个死胡同。 这是真的吗?

2 个答案:

答案 0 :(得分:3)

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

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

using namespace N;声明只能应用于名称空间。一个班级不可能做类似的事情。您只能对using Example::x;内的特定名称x Example进行逐个导入。

当提供成员​​函数体外,你必须写Example::Private(),没有其他选择。

答案 1 :(得分:0)

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

您可以按照here所述的方式使用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
}

但要小心。 “使用”过多会对你和那些继承你代码的人起到真正的诀窍。