【问题标题】:Best way to convert C++ object <--> C struct?转换 C++ 对象 <--> C 结构的最佳方法?
【发布时间】:2015-05-13 23:20:42
【问题描述】:

所以基本上我正在尝试将自定义 C 库集成到现有 C++ 项目中。我有各种 C++ 对象需要存储/加载到 C DB 中并与各种 C 函数接口。我需要将我的 C++ 对象转换为 C 结构,然后再转换回来。我取得了进展,但遇到了内存分配问题。

我知道我没有在此处包含任何代码,但我只是想知道是否有针对此任务的一般提示?我已经看到用于通用 C++ 对象的 extern "C" 中的 void*,但我确实需要从 C++ 对象和 C 结构加载/保存数据。

如果我的措辞不正确,请追问!

【问题讨论】:

  • 展示您正在查看的内容的示例可能会有所帮助。这是普通旧数据的集合还是其他什么? structclass 实际上是同一个东西,但默认权限不同。
  • @RetiredNinja: classstruct 在 C++ 中基本相同,但在 C 中肯定不同。您不能将多态 C++ 类对象传递给期望扁平 C- 的 C 代码样式结构,布局将不匹配。因此,在琐碎的情况下,可能需要从一个到另一个进行一些转换。但你是对的,我们需要一个 OP 用例的例子。

标签: c++ c object struct


【解决方案1】:

使用extern "C" 声明您的C 结构:

extern "C" {
    struct some_c_struct {
        int field1;
        char *p;
    };
};

然后,在您的 C++ 代码中,您可以像使用任何其他 C++ classstruct 一样使用 some_c_struct,保证 C 兼容性,并成功地将它们传递到您正在使用的 C 代码库或从您使用的 C 代码库传递它们。

实际上,不需要extern "C" 声明,但所有语言律师都需要它。此外,您的结构不能使用任何 C++ 特定的功能,例如虚函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多