我正在尝试使用两个非常大的C ++库来编写自己的库和应用程序集,并且在两个库的主头类中都使用了指令。冲突在于一个类,称为vector(使用std :: vector)。一个标题有“using namespace std”,这会让事情变得混乱。
在使用“using namespace”之后,是否有办法从命名空间中排除标识符?
答案 0 :(得分:2)
有没有办法让蠕虫回到罐子里?
没有。
最好的选择是使用using指令修复标头。删除它并在声明中添加所需的std::
前缀。
答案 1 :(得分:2)
在C ++中无法取消使用。在这种情况下,我能想到的唯一选择是:
让图书馆作家修复他们的图书馆。标题中的using
绝对是库中应该修复的错误。
通过使用单独的,完全分隔的实现文件,在应用程序中完全隔离这两个库。如果两个库需要进行通信,则必须在代码中创建某种介体以将它们粘合在一起。
答案 2 :(得分:1)
您可以创建自己的包装器头,其中包含库头,同时将其包装在命名空间中。
例如,对于任何给定标题<brokenlib.h>
,请创建"mybrokenlib.h"
,如下所示:
#ifndef MY_WRAPPER_HEADER_H
#define MY_WRAPPER_HEADER_H 1
namespace brokenlib
{
#include <brokenlib.h>
}
#endif
标题显然仍然具有using语句,但现在它会将std
中的符号注入brokenlib
命名空间而不是全局命名空间。
希望图书馆没有很多需要包装的入口点。
编辑:正如DavidRodríguez所指出的,只有当您使用的库只是标题时,这才有效。唯一真正的解决方案是修复库(希望它们是开源的吗?)答案 3 :(得分:0)
我想这个简单的盾牌将是一个解决方案:
namespace myShield {
#include "problematicheader.h"
}
编辑:仅适用于仅限标题的库:/