在不同命名空间中具有相同名称的类

Classes with same name in different namespace

本文关键字:命名空间      更新时间:2023-10-16

我正在写一个库。这是一个坏主意,有两个类具有相同的名称,但每个类都在不同的命名空间?

使用名称空间:

//forward declaration
namespace sparse {
    class matrix;
}
namespace dense {
    class matrix;
}
namespace dense {
    typedef Index uint64_t;
    class matrix {
        public:
        sparse::matrix tosparse();
    };
}
namespace sparse {
    typedef Index uint32_t;
    class matrix {
        dense::matrix todense();
    };
}

或者,我可以使用长名称:

class sparse_matrix
...

一般来说,这很好。这正是名称空间的作用所在。在本例中,不清楚设计目标是什么,因此也不清楚这是否是名称空间的适当使用。

是的,这是个坏主意。

  1. 可以包含多个命名空间。所以这相当于写稀疏::矩阵vs密集::矩阵。
  2. 清晰为王。sparse_matrix表示该对象的行为。
  3. 它们为客户端提供类似/相同的实用程序。为什么使用不同的名称空间?

如果你想让它们有一个共同的基础,做继承(抽象或非)。