C++:"类命名空间"?

Eve*_*Eve 12 c++ oop namespaces class

如果在C++中我有一个类longUnderstandableName.对于该类,我有一个包含其方法声明的头文件.在该类的源文件,我必须写longUnderstandableName::MethodA,longUnderstandableName::MethodB等等,无处不在.

我能以某种方式利用命名空间或别的东西,所以我可以只写MethodAMethodB,类源文件中,也只有在那里?

Ken*_*oom 12

typedef longUnderstandableName sn;
Run Code Online (Sandbox Code Playgroud)

然后您可以将方法定义为

void sn::MethodA() {}
void sn::MethodB() {}
Run Code Online (Sandbox Code Playgroud)

并将它们用作

sn::MethodA();
sn::MethodB();
Run Code Online (Sandbox Code Playgroud)

这只有longUnderstandableName在类的名称时才有效.即使该类深深嵌入其他一些命名空间,它也能工作.

如果longUnderstandableName是命名空间的名称,那么在要使用这些方法的命名空间(或源文件)中,您可以编写

using namespace longUnderstandableName;
Run Code Online (Sandbox Code Playgroud)

然后调用类似的方法

MethodA();
MethodB();
Run Code Online (Sandbox Code Playgroud)

您应该小心不要使用using namespace foo;in头文件,因为它会污染.cpp我们#include头文件所包含的每个文件,但是绝对允许并鼓励using namespace foo;使用.cpp文件顶部的文件.

  • @Basilevs在询问**定义**成员函数时是否可以使用typedef,而不是**使用**时,这是(我认为)原始问题.换句话说,以下代码是否正确`typedef longUnderstandableName sn; void sn :: MethodA(){}`?(显然,它是.) (3认同)

Jer*_*fin 0

我不确定我是否会推荐它,但您可以使用如下宏:

#define sn LongUnderstandableName

void sn::MethodA(parameters) { ... }
int sn::MethodB(parameters) { ... }
Run Code Online (Sandbox Code Playgroud)

等等。宏的缺点之一是它们不尊重范围,但在这种情况下,您(显然)想要的范围是源文件,它恰好与宏的范围对应(非常接近)。

  • -1 使 typedef 答案更好:) (4认同)