C++命名空间版本控制

C++ Namespace versioning

本文关键字:版本控制 命名空间 C++      更新时间:2023-10-16

C++可以为命名空间版本控制执行以下操作

第一个版本:

namespace A__v1 {
  class X ...
  class Y ...
  class Z ...
}
namespace A = A__v1

第二个版本(更改了 X 类):

namespace A__v1 {
  class X ...
  class Y ...
  class Z ...
}
namespace A__v2 {
  class X ...
  using A__v1::Y;
  using A__v1::Z;
}
namespace A = A__v2

我想知道的是,值得付出努力吗?在更改命名空间的内部结构时,这真的为您的应用程序/库增加了任何优势吗?

我实际上喜欢处理这个问题的非宏方式,它允许库的一个构建为多个版本提供服务。这将不可避免地增加库的大小(由于存在某些类的更多版本),但有一个警告:编译器很可能会报告类的完整命名空间限定,使库的用户非常困惑,他们不知道你的非标准版本控制方案。

再三考虑,我也不认为在一个库构建中提供相同事物的两个版本,除非涉及不同的 CPU/架构,但我认为这不是你要说的。保留旧版本的类并不明智,如果不需要,人们永远不会切换到较新的类,如果某些内容(半内部)被弃用,您将删除一些"库的一部分"可以这么说。

这是一个很好的技巧,非常有用,但有一些问题需要注意。 大多数情况下,不能使用名称 A 作为命名空间来专门化模板。

C++0X 具有内联命名空间,旨在更好地处理此问题。

对于

将使用该命名空间的程序员来说,该库可能很棘手,也许最好单独使用单独的命名空间来区分。