C++,命名空间最佳实践



我的项目被划分为多个模块,它们共享相似的结构,我不想编写像EntityHandlerInputHandler这样的类,而是想使用名称空间并编写Input::HandlerEntity::Handler。现在,这一切对我来说似乎很好,但这些名称空间也嵌套在另一个名称空间中,该名称空间也有一个Handler类!

有些人说这是一种糟糕的做法,可能会让人困惑,但作为我风格的一部分,我从不使用using <namespace>;关键字,所以它看起来总是很明确。你认为这是一个好的练习吗?如果不是,你能告诉我这会在哪里反噬我吗?

如果以前有人问过我,我很抱歉,我看的地方没有很好地解释为什么或为什么不这样做!

我认为最好在不使用的情况下完全限定命名空间,因为它可以在读取和/或编译代码时消除一些错误。在许多教程中,建议在函数声明中使用完全限定的命名空间,即void doSome(std::vector&data(,而不是使用命名空间std+doSome。完全限定命名空间是一种很好的做法,因为它可以减少编译阶段的类型解析歧义错误。考虑以下示例:

class A {
private:
Super::Handler* _handlerOne;
Super::Entity::Handler* _handlerTwo;
};

当你使用时,很难做到这一点

using namespace Super;
using namespace Super::Handler;
class A {
private:
Handler* _handlerOne;  // What type compiler place here ??? , we don't know ...
Handler* _handlerTwo;  // What type compiler place here ??? , we don't know ...
};

更少的歧义-更好的代码。

最新更新