在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 ++命名空间中包含旧库的主要内容,如果未能解决你的问题,请参考以下文章

在命名空间中包装外部库

哪些 C 构造出现在 std 命名空间中?

代码分析错误:在命名空间中声明类型

命名空间

为啥我在vs2010下编写代码的时候代码下面会出现红色波浪线?

VB代码到C# - 命名空间Microsoft.VisualBasic