【发布时间】:2012-07-06 01:50:27
【问题描述】:
使用嵌套命名空间时,有时完全限定名称会变得很长。我知道我可以使用namespace abc = aaa::bbb::ccc 来减少打字量(在某些情况下它还可以提高可读性)。
但是,我不确定在项目中的所有文件中实现此重命名的最佳方法是什么。直接的方法(即,在每次使用的基础上重命名长名称空间)可能会导致最终在不同文件中为相同的完全限定名称使用不同的短名称。所以,我正在考虑想出一个更一致的方法来做到这一点。
例如,我们假设如下:
project
|- client
| |- core
| |- plugin
| |- util
|- server
...
我正在考虑为每个目录创建一个标头,包括简化后的名称。例如,project/client/core/core.h 将包含 namespace pr_cl_core = project::client::core(我知道这个短名称的示例相当糟糕,但在实际项目中它们更有意义)。然后,我会将core.h 包含到project/client/core 中的所有头文件中,这样当该目录中的头文件包含在project/client/plugin/plugin_foo.h 中时,短命名空间版本就很容易获得。
这是一个好方法吗?还有其他更好的方法吗?
我在 SO 上发现了几个关于 C++ 命名空间的问题(例如,1 和 2),但没有一个与如何以项目范围的方式解决命名空间重命名有关。
编辑:此外,这种机制可用于系统地重命名整个项目的长命名空间(例如 Boost 的命名空间)。例如,我通常会重命名一些命名空间,例如:
namespace ip = boost::asio::ip;
namespace ptime = boost::posix_time;
目前我在每个翻译单元的基础上执行此操作,但我希望对整个项目使用全局方法。
【问题讨论】:
-
@close-voters 我不明白为什么这个问题没有建设性。在某些时候,SO 可能会变成一个只允许回答简短而明确的问题(例如“你忘记了分号”)的地方。不过,我希望这永远不会发生。
-
我缺少的一点是,如果您愿意为每个长名称空间提供一个短名称,您为什么不首先这样做呢? (即为什么有一个复杂的命名空间层次结构和一个重新映射的平面列表)?我只认为别名命名空间对单个翻译单元有用(即在 .cpp 中,而不是在标题中)。
-
@betabandido:这不是短/长答案的问题,而是客观答案的问题。这个问题非常主观。有些人(像我一样)会更喜欢
pcc,而不是像pr_cl_core这样笨拙的名字,或者只是using project::client::core::OneClass;,而其他人会争论最好的名字采样方式(匈牙利语?)。因此,这个问题太难以辩论,无法具有建设性。 -
@MatthieuM。好吧,我不是在问哪个命名更好(
pccvs.pr_cl_core),而是如何在整个项目中从技术上实现这样的重命名。这不是主观的。可能有多种解决方案,但这是一个明确的目标,IMO。 -
@MatthieuM。我想说很多人会同意为整个项目命名一致的好处。我不明白你为什么要相反。
标签: c++ namespaces hierarchy