gpt4 book ai didi

c++ - 从 "C++"代码调用 "C"类成员函数

转载 作者:IT老高 更新时间:2023-10-28 22:17:32 25 4
gpt4 key购买 nike

我们如何在“C”代码中调用“C++”类成员函数?

我有两个文件.cpp,我在其中定义了一些具有成员函数的类和相应的“.h”文件,其中包括一些其他帮助 cpp/h 文件。

现在我想在“C”文件中调用 CPP 文件的这些功能。我该怎么做?

最佳答案

C 没有 thiscall 概念。 C 调用约定不允许直接调用 C++ 对象成员函数。

因此,您需要为您的 C++ 对象提供一个包装 API,该 API 显式地而不是隐式地获取 this 指针。

例子:

// C.hpp
// uses C++ calling convention
class C {
public:
bool foo( int arg );
};

C 封装 API:

// api.h
// uses C calling convention
#ifdef __cplusplus
extern "C" {
#endif

void* C_Create();
void C_Destroy( void* thisC );
bool C_foo( void* thisC, int arg );

#ifdef __cplusplus
}
#endif

您的 API 将在 C++ 中实现:

#include "api.h"
#include "C.hpp"

void* C_Create() { return new C(); }
void C_Destroy( void* thisC ) {
delete static_cast<C*>(thisC);
}
bool C_foo( void* thisC, int arg ) {
return static_cast<C*>(thisC)->foo( arg );
}

那里也有很多很棒的文档。第一个I bumped into可以找到here .

关于c++ - 从 "C++"代码调用 "C"类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3583353/

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