Mat*_*att 5 namespaces static-libraries c++11
所以我正在构建一个基于其他库的c ++ 11库,比如opengl,SDL2,assimp,glm等......唯一的问题是大多数这些库将它们的函数或对象放在全局命名空间中:这可能会发生冲突和我的课!(例如,assimp向量和我的Vector类...)所以我想把库放在命名空间中,而不是让它们"污染"全局命名空间.
我想过这样做:
namespace some_name_space
{
#include <some/kind/of/lib>
}
Run Code Online (Sandbox Code Playgroud)
但我意识到在全局命名空间中仍然会有一部分库!
关于如何实现这个的任何建议?
PS:我可以"包装"libs,但这不会真正被管理!
我想您想要的是将所有库的函数和类放入命名空间中。
在这个答案中,我将使用gl/gl.h一个例子。
据我所知,该行将#include <gl/gl.h>被替换为gl/gl.h.
如果您想将所有类和函数移至gl/gl.h命名空间(gl例如),我应该创建一个名为的中间文件,__gl.hpp其内容如下:
namespace gl {
using namespace gl; //because gl/gl.h don't know namespace gl
#include <gl/gl.h>
//#include more and more kind of libraries which use namespace gl
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的主文件中,使用#include "__gl.hpp"而不是#include <gl/gl.h>
请注意,宏可能不会移至 中namespace gl,因为它们是宏。
但不用担心,因为:
几乎宏都有大写标识符,几乎非宏都是小写或 UpperAndLowerCase 或 lowerAndUpperCase 或 lower_case_and_underscore ...
如果重新定义宏,编译器会向您发出警告。因此,您不必担心同名宏。
这种方式也适用于windows.h其他一些库,但几乎不适用于C/C++标准库。