在命名空间中包含旧库C++

include old library in C++ namespace

本文关键字:C++ 包含旧 命名空间      更新时间:2023-10-16

我正在尝试在一个更大的项目中使用两个旧的(和不同的)USB库,将它们封装到它们自己的命名空间中,如下所示:

namespace usbA {
#include "/msp430/usb.h"
}
namespace usbB {
#include "/cypress/usb.h"
}

这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。 可以在不编辑库代码的情况下解决此问题吗? 根据其他一些海报的答案,这是无法做到的。这就引出了一个问题,那么命名空间有什么用呢?如果我必须进入并修改库源代码,我也可以用"usbA_"作为每个函数的前缀,而不是使用命名空间。它同样不灵活。

这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。可以在不编辑库代码的情况下解决此问题吗?

我相信会有可怕的方法来破解它,但我真的只是......不会。在我看来,它注定会以眼泪结束。

如果你真的需要这两个库,并且它们的名称确实冲突,我认为总的来说,你最好分叉它们并自己给它们命名空间。

这就引出了一个问题,那么命名空间有什么用呢?

如果你不使用它们,它们就一无是处(C 代码显然不使用它们)。如果这些库C++带有命名空间的项目,那么你就不会有这个问题,这对很多事情都有好处。

它同样不灵活

好吧,这就是C++引入命名空间的原因。可悲的是,你不能强迫每个人写C++。