在命名空间中包含旧库C++
include old library in C++ namespace
我正在尝试在一个更大的项目中使用两个旧的(和不同的)USB库,将它们封装到它们自己的命名空间中,如下所示:
namespace usbA {
#include "/msp430/usb.h"
}
namespace usbB {
#include "/cypress/usb.h"
}
这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。 可以在不编辑库代码的情况下解决此问题吗? 根据其他一些海报的答案,这是无法做到的。这就引出了一个问题,那么命名空间有什么用呢?如果我必须进入并修改库源代码,我也可以用"usbA_"作为每个函数的前缀,而不是使用命名空间。它同样不灵活。
这显然会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。可以在不编辑库代码的情况下解决此问题吗?
我相信会有可怕的方法来破解它,但我真的只是......不会。在我看来,它注定会以眼泪结束。
如果你真的需要这两个库,并且它们的名称确实冲突,我认为总的来说,你最好分叉它们并自己给它们命名空间。
这就引出了一个问题,那么命名空间有什么用呢?
如果你不使用它们,它们就一无是处(C 代码显然不使用它们)。如果这些库C++带有命名空间的项目,那么你就不会有这个问题,这对很多事情都有好处。
它同样不灵活
好吧,这就是C++引入命名空间的原因。可悲的是,你不能强迫每个人写C++。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- 在命名空间中包含旧库C++
- 即使在将新字符串复制到现有字符串之后,旧包含也可用(在某些索引中)
- 如何将GLES包含在旧GL中
- 无法打开包含文件:"iProxyTrans.h" - 旧的 Directshow 项目?
- Boost库在c++中包含之后会发生什么,除了使用旧的标准代码