【发布时间】:2015-11-11 12:05:42
【问题描述】:
在 C++ 实现文件中,我可以选择编写如下内容:
name::space::ClassName::someFunction(int param) {
// impl
}
而不是
namespace name {
namespace space {
ClassName::someFunction(int param) {
// impl
}
}
}
我觉得非常方便且更具可读性。这也可以在头文件中使用吗?像这样的:
class name::space::ClassName {
// declarations
};
而不是
namespace name {
namespace space {
class ClassName {
// declarations
};
}
}
如果这样的事情是可能的,那么在什么条件下?我可以想象,需要 forward 声明命名空间 向前声明命名空间中的类,如下所示:
namespace name {
namespace space {
class ClassName;
}
}
在能够使用它之前:
class name::space::ClassName {
// declarations
};
在头文件中。
但不知何故,我无法让它工作1]。甚至可能吗?困扰我的是,对于嵌套的命名空间,我必须缩进 2 个制表符,直到我可以真正声明我的类。我想在我的头文件中使用该空间,但我不想省略制表符,因为这违反了“大括号中的所有内容都需要制表符一次”的规则(我不知道是否有一个实际的名字。如果有,请原谅我的无知,我不知道:S
1] 我遇到的问题与问题无关。该方法确实有效,但有缺点(请参阅已接受的答案)。
【问题讨论】:
-
with nested namespaces I have to indent 2 tabs你并没有真正有,这是关于你的编码约定。例如,在我工作的所有地方,我们都不会为嵌套命名空间添加额外的缩进。 -
该制表规则的一种混合形式是在一行中使用
namespace name { namespace space {,其余的只用一个制表符缩进,然后以} }结束 -
@SingerOfTheFall 哪个(=不缩进命名空间)我认为这是一件非常明智的事情。
-
问题是
name::space::引用 命名空间name下定义了另一个命名空间space。它没有定义它。 -
是的,我知道我可以内联编写它,但不知何故我不太喜欢它。我非常了解统一约定,其中还包括我的命名空间
标签: c++