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

问题描述 投票:1回答:1

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

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

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

c++ header namespaces
1个回答
2
投票

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

我敢肯定会有可怕的方法来破解这个,但我真的只是......不是。在我看来,它必将以泪水结束。

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

这引出了什么是名称空间好的问题呢?

如果你不使用它们,它们就没有任何好处(C代码显然不使用它们)。如果这些库是带有命名空间的C ++项目,那么你就不会遇到这个问题,这很有用。

它同样不灵活

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

© www.soinside.com 2019 - 2024. All rights reserved.