gpt4 book ai didi

c++ - 在 c 文件中使用 C++ 类

转载 作者:行者123 更新时间:2023-11-30 20:00:20 25 4
gpt4 key购买 nike

我需要使用mbed api但仅限于使用 C。我如何在 c 文件中使用例如 SPI 类。从网上查找到使用 C++ 类,您应该在 C++ 中创建一个包装函数,但正如所述我不能使用 C++,他们是解决这个问题的另一种方法吗?

最佳答案

How can I use for example a SPI class in a c file.

您不能在 C 中使用类

From looking online to use C++ classes you should create a wrapper function in C++

这是正确的。

is their another way around this?

没有。

but as stated I can't use C++

那么你就别无选择(就标准而言)。 C++ API(包含类和所有内容)不能在 C 中使用。可以创建一个仅使用两种语言共享的功能(排除所有 OOP 内容)的包装器接口(interface)。

该包装器接口(interface)只能用 C++ 实现,因为它必须与其所包装的接口(interface)交互。如果包装器可以用 C 实现,那么就不需要它了。一旦实现了该包装器接口(interface),就可以从 C 中使用它。

其他一些要点:

  • 如果库使用 C++,则 main 必须用 C++ 实现。该 main 也可以是 C 函数的简单包装器,可以轻松地从 C++ 调用它。
  • 您必须链接 C++ 库的依赖项,其中可能包括 C++ 标准库
<小时/>

示例:

C++ API

// interface.hpp
class C {
public:
std::string str;
};

API 的 C 包装

// wrapper.h
struct C;
struct C* makeC();
void freeC(struct C*);
void setStr(struct C*, char*);
conts char* getStr(struct C*);

包装器的实现(C++)

extern "C" {
#include "wrapper.h"
}
#include "interface.hpp"

C* makeC() { return new C; }
void freeC(C* c) { delete c; }
void setStr(C* c, char* str) { c->str = str; }
const char* getStr(C* c) { return c->str.c_str(); }

C语言中的用法

struct C* c = makeC();
setStr(c, "test");
puts(getStr(c));
freeC(c);
<小时/>

除非类定义及其所有子对象不使用任何 C++ 功能。然后它与相同的 C 结构兼容。

关于c++ - 在 c 文件中使用 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com