我试图链接到一个外部库,我无法控制,它的功能没有任何名称空间.
因为我不希望与该库中定义的名称发生冲突:如何将外部头文件包含在我自己创建的命名空间中?
我知道以下代码不起作用,但问题的精神在于:
namespace extLib {
#include "externalFolder/externalHeader.h"
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用仅限标头的库,则您提到的方法可能会起作用.至少我不能马上想到任何问题.
但是如果你有一个你必须链接到的编译库,就没有办法将库函数本身放入它们自己的命名空间中(至少在没有重新编译你自己的所述库版本的情况下).这是因为在.dll
或.so
或你有什么,每个功能都有一个重整名称包括所有命名空间(例如).当你最终链接到库时,你只能在那个确切的受损名称下"到达"那些函数,这要求你的函数调用与编译版本相同(或者,在你的情况下,没有)命名空间.
"经典"解决方法是在库周围编写一个薄包装器,对于每个公开的函数,您可以:
wrapper.h:
namespace libraryWrapper
{
void bar(int);
}
Run Code Online (Sandbox Code Playgroud)
wrapper.cpp
#include "realLibrary.h" // Defines bar(int)
void libraryWrapper::bar(int x)
{
::bar(x)
}
Run Code Online (Sandbox Code Playgroud)