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

时间:2018-02-28 17:14:43

标签: c++ header namespaces

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

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

  

这引出了什么是名称空间有用的问题?

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

  

同样不灵活

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