假设我们有一个C ++项目。我们可以通过extern "C"
关键字使用C ++项目中C文件中定义的函数。例如:
C代码:cfile.c
#include <stdio.h>
void f(void)
{
printf("\n This is a C code\n");
}
Cpp代码:cppfile.cpp
#include <iostream>
extern "C" {
void f();
}
int main(void)
{
f();
return 0;
}
那么,我们能否为相反的情况做到这一点:
Cpp代码:cppCode.cpp
struct MyClass
{
virtual void f(const char* text);
void func(const char* text);
};
我们可以在C文件中实现f
方法和func
方法(例如: cCode.c ) ??? 是吗有可能? (仅仅是出于个人目的的问题)
答案 0 :(得分:4)
你不能直接这样做。但是,有一种解决方法(各种各样)。你可以使用一个带有“C”链接的函数,它返回指向类对象的指针 - 可能是动态分配的 - 转换为void*
。
你可以实现映射到类中函数的函数,但是需要一个额外的参数 - void*
,这是从上面的调用创建函数获得的地址。他们只需将此void*
转换为类的类型并将其称为成员。
最后,你需要一个可以删除指针的dispose函数。