C++命名空间版本控制
C++ Namespace versioning
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 具有内联命名空间,旨在更好地处理此问题。
对于
将使用该命名空间的程序员来说,该库可能很棘手,也许最好单独使用单独的命名空间来区分。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- gSOAP从2.8.10升级到最新版本(2.8.54),在几个XML标记上没有ns:for命名空间
- GCC 函数多版本控制和命名空间
- 控制命名空间中的访问
- 是std::命名空间中的C标准库函数的C++版本
- C++命名空间版本控制