【问题标题】:Including c++ libraries in C [duplicate]在 C 中包含 c++ 库 [重复]
【发布时间】:2014-08-30 10:04:56
【问题描述】:

我有一个包含 boost 库的头文件,我需要将这个头文件包含在用 C 编写的源代码中。可以这样做吗?

谢谢!

【问题讨论】:

  • 您需要在您的 C++ 库中实现一个包装器,以便提供可以从您的 C 代码调用的 C API。
  • @zuubs 你可以很确定 Paul R. 明白这一点,他没有错。你需要把它包起来。

标签: c++ c boost include


【解决方案1】:

您不能在C 中使用Boost 库。

但您可以找到许多替代品,例如 GLIBAPR

【讨论】:

  • 我认为您的提升网址已损坏。我需要提升 Cassandra 的 C++ 驱动程序 github.com/datastax/cpp-driver 并且没有其他方法可以使用其他东西。
  • @zubs Check 再次更新它。另外 boost 是 C++ 库的集合,可帮助您避免编写自定义代码来解决常见问题。而且您无法修改它。
【解决方案2】:

使用适配器模式 (http://en.wikipedia.org/wiki/Adapter_pattern) 这篇文章已经讨论了类似的问题:Using C++ library in C code)

【讨论】:

    【解决方案3】:

    不,您通常不能在 C 程序中包含 C++ 标头。您需要将 C 程序可能使用的声明分离到单独的标头中,并确保它们在 C++ 中具有正确的语言链接:

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    // C-compatible declarations here
    
    #ifdef __cplusplus
    }
    #endif
    

    【讨论】:

    • 如何包装诸如#include 之类的包含?
    • @zubs:为 C++ 类定义不完整的类型(用于高级用途的兼容布局的具体类),并在您需要调用的每个 C++ 方法的标头中声明一个转发器。当然,这些都需要用 C++ 实现。
    • @zuubs:点击复制链接即可。
    • @zuubs:你不知道。您为您的库设计一个与 C 兼容的 API,并在 C 标头中声明它。仅包含来自 C++ 源文件的 Boost 和其他仅限 C++ 的标头。
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2014-08-26
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多