gpt4 book ai didi

c++命名空间最佳实践困境

转载 作者:IT老高 更新时间:2023-10-28 12:59:40 25 4
gpt4 key购买 nike

我发现我认为在 c++ 中使用命名空间的“最佳实践”正在损害我的代码的可读性,并让我质疑如何很好地使用它们。

我的程序由几个不同的模块组成,这些模块大多内置在“主”应用程序使用的库中。每个库都使用自己的命名空间,它们的命名空间都在项目命名空间“内部”,以帮助项目避免与第 3 方代码发生名称冲突。所以我最终得到了诸如“myproject::logging::Logger”和“myproject::reporting::ReportType”之类的类名(作为示例)。

到目前为止一切顺利。在我的 .cpp 文件中我没有问题。例如,我在顶部使用“使用 myproject::logging”,并且可以清楚地引用我的 Logging 类。万一我的两个命名空间之间发生冲突,我可以明确地说出我想要哪一个。这很好用。

头文件是不同的。将 using 语句放入头文件被认为是一种不好的做法,因为它们会影响可能不相关的代码。所以我总是完全限定 .hpp 文件中的所有名称。这有点难看,但到目前为止还可以处理,所以我已经忍受了。但是现在我正在增加在我的库中使用模板代码,这意味着现在我的 .hpp 文件中有更多实际代码。由于类型名称的长度,必须完全限定每个名称使得代码实际上不可读。

我开始感觉到命名空间的好处和使用它们的最佳实践开始被我必须编写的代码的不可读性所抵消。我开始怀疑我是否会更好地放弃使用命名空间来获得更具可读性的代码并在它们出现时修复任何名称冲突。

另一种方法是使用短的、单层的命名空间,因此我将只使用“log::Logger”而不是“myproject::logging::Logger”,这将有很大帮助,但会使命名空间冲突的可能性更高,并且还让命名空间传达不太有用的信息。

正如我所说,这只会真正影响 .hpp 文件中的代码,因为我很乐意在我的实现文件中使用“使用命名空间”来使其易于管理,但它正在成为一个问题当我现在查看 .hpp 文件中的模板化代码时,我会想“eww ....”这不是很好:P

有人有什么实用的建议吗?

最佳答案

这就是我的工作。

<mylibrary.h> :

namespace myproject {
namespace mylibrary
{
namespace impl
{
using namespace otherlibrary;
using namespace boost;
using namespace std;
using namespace whatever::floats::your::boat;

class myclass;
class myotherclass;
};
using impl::myclass;
using impl::myotherclass;
};
};

来源:

#include <mylibrary.h>
using namespace myproject::mylibrary; //clean!

关于c++命名空间最佳实践困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6955023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com