提问人:Stefan Stanković 提问时间:11/29/2015 最后编辑:Stefan Stanković 更新时间:11/29/2015 访问量:13101
类名可以用作命名空间吗?
Can a class name be used as a namespace?
问:
我记得有人告诉我,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赞
Ken Clement
11/29/2015
#1
是的,每个类都有自己的命名空间,类声明的所有部分都属于该命名空间。
您可以按照此处的说明使用指令。
需要注意的是,您不能声明与类同名的命名空间,如下所示:
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
}
不过要小心。“使用”太多会对你和那些继承你代码的人造成真正的把戏。
评论
1赞
Stefan Stanković
11/29/2015
尽管有这些例子,恐怕你不理解我。这里没有一个例子/解释来描述我提到的用法。请随时用一个例子证明我错了,我将不胜感激。
15赞
M.M
11/29/2015
#2
不,命名空间和类是不同的。
但是,命名空间和类都引入了一个范围,可以使用范围解析运算符来引用该范围。::
该声明只能应用于命名空间。不可能为一个类做类似的事情。您只能对里面的特定名称进行逐个导入。using namespace N;
using Example::x;
x
Example
在提供成员函数体外行时,必须写成,没有别的选择。Example::Private()
评论