【发布时间】:2022-01-01 05:09:08
【问题描述】:
这个公共类有一个库。
namespace lib {
class Class {};
}
我想重构它并添加一个更多的命名空间。
namespace lib::sublib {
class Class {};
}
我想让它的 API 向后兼容,这样现有的库客户端就可以在不更改代码的情况下使用新的库版本进行编译。我尝试添加别名。
namespace lib {
using Class [[deprecated]] = sublib::Class;
}
这在大多数情况下都有效,除非库客户端转发声明 lib::Class。
namespace lib {
class Class;
}
在这种情况下,存在声明冲突的错误。
<source>: error: conflicting declaration 'using Class = class lib::sublib::Class'
10 | using Class = sublib::Class;
| ^~~~~
<source>: note: previous declaration as 'class lib::Class'
2 | class Class;
| ^~~~~
有没有办法添加一个新的命名空间而不破坏现有的代码?这个问题仅与 API 有关。不需要 ABI 向后兼容。
【问题讨论】:
-
我会提议inline namespaces,但有类似的问题。
标签: c++ namespaces c++17 refactoring forward-declaration