将外部库包装在名称空间中

Wrapping external libraries in namespaces

本文关键字:空间 外部 包装      更新时间:2023-10-16

我正在写一个库在我的项目中使用。在其中,我希望将c标准库包装在我的库的命名空间和cstd命名空间中,以避免其函数在全局命名空间中。但是,从我之前提出的问题和我所测试的情况来看,我不能仅仅#包括名称空间中的所有内容。有什么办法可以做到吗?

我对此表示怀疑,除非你想重写所有内容。

C语言本身没有名称空间的概念,因此C标准库使用的所有内容都必须依赖于它要查找的内容驻留在全局名称空间中的事实。

如果您只是在#include周围包装一个名称空间,编译器将无法找到任何内容,因为它不知道要查找哪个名称空间。

通常的方法是在实现文件中放入第三方包含,以防止它们污染您的api。

myapi.hpp

void coolthing( int howcool );

myapi.cpp

#include <coollib.h>
void coolthing( int howcool )
{
    coollib_coolthing( howcool );
}