我有一个C ++类:
class foo{
.
.
.
};
我想在C代码中使用它,如下所示:
foo funct(class foo f){
.
.
.
return f;
}
这里我想在C函数中使用C ++类,它接收一个C ++类作为arg并返回它。
答案 0 :(得分:6)
您不能直接从C调用C ++类方法,但是您可以提供一组使用extern "C"
声明声明和定义的包装函数。然后使用void*
样式转换方法用C函数包装每个公共方法。
这是一个简单的例子,允许一个名为“Foo”的类与C代码链接并从中调用。
foo.h中
#ifndef FOOCLASS_H
#define FOOCLASS_H
class Foo
{
public:
int M1();
int M2(int x);
};
#endif
FooWraper.h
#ifndef FooWrapper_H
#define FooWrapper_H
#ifdef __cplusplus
extern "C" {
#endif
void* createFoo();
int Foo_M1(void* foo);
int Foo_M2(void* foo, int x);
#ifdef __cplusplus
}
#endif
#endif
FooWraper.cpp
extern "C" void* createFoo()
{
Foo* foo = new Foo();
return (void*)foo;
}
extern "C" void* deleteFoo(void* foo)
{
Foo* pRealFoo = (Foo*)foo;
delete pRealFoo;
}
extern "C" int Foo_M1(void* foo)
{
return ((Foo*)foo)->M1();
}
extern "C" int Foo_M2(void* foo, int x)
{
return ((Foo*)foo)->M2(x);
}
的main.c
#include "FooWraper.h"
int main()
{
void* foo = createFoo();
Foo_M2(foo, 42);
deleteFoo(foo);
}