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()
,没办法
我记得有人告诉我 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()
,没办法