在命名空间中包装外部库

Posted

技术标签:

【中文标题】在命名空间中包装外部库【英文标题】:Wrapping external libraries in namespaces 【发布时间】:2011-12-24 18:31:50 【问题描述】:

我正在编写一个库以在我的项目中使用。在其中,我希望将 c 标准库包装在我的库的命名空间和 cstd 命名空间中,以避免将其函数放在全局命名空间中。但是,根据我之前提出的问题和我测试的内容,我不能只 #include 命名空间中的所有内容。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

myapi.hpp

void coolthing( int howcool );

myapi.cpp

#include <coollib.h>

void coolthing( int howcool )

    coollib_coolthing( howcool );

【讨论】:

这仅适用于 PRIVATE 链接库

以上是关于在命名空间中包装外部库的主要内容,如果未能解决你的问题,请参考以下文章

Clojure 中的命名空间之间共享函数

具有相同命名空间名称时的模拟库函数

第二十一章 命名空间和程序集

在标头和源代码 (cpp) 中创建 C++ 命名空间

如何从嵌套命名空间中引用外部 C++ 命名空间?

LayaBox---TypeScript---命名空间和模块