在命名空间中包装外部库
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 链接库以上是关于在命名空间中包装外部库的主要内容,如果未能解决你的问题,请参考以下文章