【问题标题】:How to generate the C and C++ header file for a C++ library/class?如何为 C++ 库/类生成 C 和 C++ 头文件?
【发布时间】:2020-05-15 14:10:32
【问题描述】:

我已经开发了一个自定义 C++ linux 库来通过我的驱动程序控制设备。该库控制流程以正确使用设备,我希望我的用户能够从 C 和 C++ 应用程序调用“lib/API”。

基本上,该库只是一个包含 publicprivate/protected 变量和方法的类。

用户应该能够从 CC++ 应用程序调用我的库。

我想从标题中隐藏所有那些私有/受保护变量和方法。

  • 什么是我需要的最佳实践?

  • 是否有工具可以自动生成/导出:

    • 用户开发C应用的C头文件
      • 基本上是 struct 而不是 class 并使用 struct* 而不是方法来运行
    • 仅公开公共变量和方法的 C++ 头文件
      • 类定义会有所不同,我不确定它是否有效

很久以前,我收到了一个带有 C 头文件的共享库,其中包含所有看起来像是最初用 C++ 开发的函数。

编辑:

  • 有没有办法让 C 头文件链接到 C++ 类?

C++ 头文件:

class foo
{
public:
    int foo(bar *bar);
private:
    foo *m_foo;
};

C 头文件等价于 C++ 头文件:

struct foo;

int foo_foo(foo* foo, bar *bar);

【问题讨论】:

  • 如果您想创建一个c 标头,那么您将丢失所有与 OOP 相关的内容。您需要将每个交互从 C-API 包装到您的 cpp 代码。这在每种情况下可能都不是微不足道的。
  • Since I'd like to hide all those private/protected variables and methods and prevent my users to change anything in any event 隐藏数据不会阻止用户在任何情况下更改任何内容。内存中的数据仍然可以通过直接内存访问来修改。 private/protected 不是保护数据不被查看或故意更改的机制。
  • isocpp.org/wiki/faq/compiler-dependencies#convert-to-c 可能对你有深刻见解或令人沮丧
  • “只公开公共变量和方法的 C++ 头文件”不是有用的头文件,因为它声明了一个不兼容的同名类型
  • 您可以编写一个 C++ 外观,将您的实际类作为 pImpl

标签: c++


【解决方案1】:

我认为这个链接回答了我关于 C 标头的问题: Can I use shared library created in C++ in a C program?

对于隐藏私有/受保护的 C++ 标头,我发现了看起来很完美的 PIMPL 成语。谢谢 Caleth。

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 2021-10-25
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多