C ++ 11的内联命名空间似乎旨在解决在同一C ++标头中支持多个ABI版本的问题,方法是在新版本的API中添加新的命名空间并更改默认情况下内联的内容:
inline namespace abi2 {
int bar(int x); // New version
int baz(); // The same
}
namespace abi1 {
int bar(int x, int y); // Deprecated
int baz(); // The same
}
当abi1
是内联命名空间时编译回来的程序在添加abi2
后仍然可以在运行时链接到库(作为新编译程序的默认值)。我得到了这一切。
我不理解的部分是:如果我在abi1
中有多个头文件中的200个方法,我想通过更改其中的几个来打破ABI(引入{{1有没有办法在没有重新声明(和实现)abi2
中版本(baz
之上)之间没有变化的所有方法的情况下做到这一点?