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

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

【问题讨论】:

    标签: c++ 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 链接库
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多