提问人:Dhwani Katagade 提问时间:10/23/2023 最后编辑:Some programmer dudeDhwani Katagade 更新时间:10/23/2023 访问量:62
为什么非内联命名空间不适用于库版本控制?
Why would non-inline namespaces not work for library versioning?
问:
在对这个问题的回答中,内联命名空间是干什么用的?,内联命名空间被称为库版本控制的一种机制。
我理解答案中提到的使用内联命名空间的整体方法,但不清楚的一件事是,为什么我们不能使用以下方法对非内联命名空间进行库版本控制?
在第一个版本中,具有如下定义。
#include <iostream>
namespace foo {
template <typename T>
void bar(T t) {
std::cout << "bar v1 - " << t;
}
}
在下一个版本中,将旧版本放在嵌套命名空间 v1 中,将较新版本放在其位置。
#include <iostream>
namespace foo {
namespace v1 {
template <typename T>
void bar(T t) {
std::cout << "bar v1 - " << t;
}
}
template <typename T>
void bar(T t) {
std::cout << "bar v2 - " << t;
}
}
所有正确的用法将自动升级到 v2,并且可以正常工作。对于 的任何用户,如果他们仍然想链接到 v1,那么他们可以将代码更改为 ,就像问题的链接答案中建议的那样,他们已将内联命名空间用于解决方案。foo::bar()
foo::bar()
foo::v1::bar()
使用上述不使用内联命名空间的方法,有什么错误或缺失或不起作用?
答: 暂无答案
评论