在C ++命名空间中包含旧库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C ++命名空间中包含旧库相关的知识,希望对你有一定的参考价值。
我试图在一个更大的项目中使用两个旧的(和不同的)usb库,将它们封装到它们自己的命名空间中,如下所示:
namespace usbA {
#include "/msp430/usb.h"
}
namespace usbB {
#include "/cypress/usb.h"
}
这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。这可以在不编辑库代码的情况下解决吗?根据其他一些海报的答案,这是无法做到的。这引出了什么是名称空间好的问题呢?如果我必须进入并修改库源代码,我也可以使用“usbA_”为每个函数添加前缀,而不是使用命名空间。它同样不灵活。
答案
这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。这可以在不编辑库代码的情况下解决吗?
我敢肯定会有可怕的方法来破解这个,但我真的只是......不是。在我看来,它必将以泪水结束。
如果你真的需要这两个库,并且它们的名字确实存在冲突,我认为总的来说,你可能最好自己分配它们并自己给它们命名空间。
这引出了什么是名称空间好的问题呢?
如果你不使用它们,它们就没有任何好处(C代码显然不使用它们)。如果这些库是带有命名空间的C ++项目,那么你就不会遇到这个问题,这很有用。
它同样不灵活
好吧,这就是C ++引入命名空间的原因。可悲的是,你不能强迫每个人都写C ++。
以上是关于在C ++命名空间中包含旧库的主要内容,如果未能解决你的问题,请参考以下文章