类名可以用作命名空间吗?
Posted
技术标签:
【中文标题】类名可以用作命名空间吗?【英文标题】:Can a class name be used as a namespace? 【发布时间】:2016-03-02 20:46:15 【问题描述】:我记得有人告诉我 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()
但我在我的书中既找不到解释也找不到示例。简短的谷歌搜索也是一条死胡同。 这是真的吗?
【问题讨论】:
【参考方案1】:不,命名空间和类是不同的。
不过,命名空间和类都引入了一个作用域,可以使用作用域解析运算符::
来引用它。
using namespace N;
声明只能应用于命名空间。不可能为班级做类似的事情。只能对Example
里面的特定名称x
做using Example::x;
,一一导入。
在提供外联成员函数体时,必须写Example::Private()
,没有办法。
【讨论】:
【参考方案2】:是的,每个类都有自己的命名空间,类声明的所有部分都属于该命名空间。
您可以按照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
不过要小心。 '使用'过多会对你和继承你的代码的人起到真正的作用。
【讨论】:
恐怕你还是不明白我的意思,尽管有例子。没有一个示例/解释here 描述了我提到的用法。随时用一个例子证明我错了,我将不胜感激。以上是关于类名可以用作命名空间吗?的主要内容,如果未能解决你的问题,请参考以下文章
我无意中为命名空间和类名使用了相同的名称,并且需要重命名其中一个的所有实例
命名空间“System.Configuration”中不存在类型或命名空间名称“ConfigurationManager”