C++最佳实践 - 在多个命名空间中定义类



>在C++中,您可以声明一个类,然后使用以下语法将其名称注入多个命名空间

namespace A
{
class MyT{};
}
namespace B
{
using A::MyT;
}

假设我的代码中的 A 和 B 表示不同类别的类,这些类不仅仅是彼此的子集,并且 MyT 实际上是属于这两个类别的类。 像我展示的那样在两个命名空间中定义类名是否被认为是一种好的做法? 这种技术是否存在潜在的缺点?

提前谢谢你

编辑: 在这种情况下,使用的目的不是缩短声明,而是使其在不同的上下文中更具可读性,以便在某些地方它可以称为 A::MyT,在其他地方称为 B::MyT,具体取决于类在用户上下文中的逻辑含义。 例如,如果 MyT 表示一扇门,并且是一个形状对象,其接口在 Geometry 命名空间中定义,但它在 Building 命名空间的上下文中使用,则在某些情况下,将其用作 Geometry::MyT,在其他情况下用作 Building::MyT。 当然,为了减少混淆的机会,我在同一个标头中声明了命名空间注入,其中类在其原始命名空间中声明

您不会在两个命名空间中"存储"类。您只是允许在namespace B中使用MyT,而没有将其限定为A::MyT

例:

namespace B
{
using A::MyT;
MyT myt;     // refers to A::MyT
}

您是否应该在实际项目中这样做取决于您认为可能存在与A::MyT发生某种命名冲突的可能性。一般来说,我会说要避免它。如果有的话,必须写A::MyT而不是MyT可以提高可读性,因为它使读者一目了然,你指的是哪个MyT

我会让我的答案尽可能没有意见。

在另一个命名空间中使用一个脱节命名空间会创建依赖项和一些硬编码,因为您需要知道使用的命名空间名称。

当且仅当这是有意的(例如陈述意图(时,请考虑它对您的项目有益。

实际上,命名空间旨在避免命名冲突。它将确保您访问正确的实体。

最新更新