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

Classes with same name in different namespace

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

使用名称空间:

//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. 可以包含多个命名空间。所以这相当于写作 sparse::matrix 与 dense::matrix。
  2. 清晰为王。 sparse_matrix 讲述了该对象的行为。
  3. 他们向客户提供 similar/the 相同的实用程序。为什么命名空间不同?

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

总的来说,没问题。这正是名称空间的用途。在这个例子中并不清楚设计目标是什么,所以不清楚这是否是对命名空间的适当使用。