我发现我认为在C++中使用命名空间的“最佳实践”会伤害我的代码的可读性,并使我怀疑如何很好地使用它们。C++命名空间最佳实践困境
我的程序由几个不同的模块组成,这些模块大多建立在“主”应用程序使用的库中。每个库都使用它自己的命名空间,它们的命名空间都位于项目命名空间的“内部”,以帮助避免与第三方代码的名称冲突。所以我最终得到了诸如“myproject :: logging :: Logger”和“myproject :: reporting :: ReportType”之类的类名(就像构成示例一样)。
到目前为止这么好。而在我的.cpp文件中,我没有问题。例如,我在顶部使用“使用myproject :: logging”,并可以干净地引用我的Logging类。在两个命名空间之间发生冲突的情况下,我可以明确地说出我想要哪一个。这很好。
头文件虽然不同。在头文件中使用语句被认为是不好的做法,因为它们会影响不相关的代码,而这些代码可能并不期望它们。所以我总是完全限定.hpp文件中的所有名称。这有点难看,但现在可以管理,所以我忍受了。但现在我正在增加在我的库中使用模板代码,这意味着现在我的.hpp文件中有更多实际代码。由于类型名称的长度,必须完全限定每个名称才能使代码几乎不可读。
我开始觉得命名空间的好处和使用它们的最佳实践开始被我不得不写的代码的不可读性所压倒。我开始怀疑,如果我放弃使用命名空间来获取更多可读代码的好处,并且在出现时修复任何名称冲突,是否会更好。
另一种方法是使用简短的单层命名空间,而不是使用“myproject :: logging :: Logger”我只需要“log :: Logger”,这将有很大帮助,但使命名空间冲突的可能性高得多,并且还有名称空间传达较少有用的信息。
正如我已经说过了,这是我高兴地用我的实现文件“使用命名空间”,以方便管理才真正影响.HPP文件中的代码,但它是成为一个问题,因为我看我在.hpp文件中的模板代码现在并认为“eww ....”,这不可能是好的:P
任何人都有任何实际的建议?
'using'指令的作用域,所以也许你可以做一些简写命名空间不头文件外泄漏? –