我们可以在C文件中定义C ++方法吗?

时间:2016-04-18 17:11:42

标签: c++

假设我们有一个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 ??? 是吗有可能? (仅仅是出于个人目的的问题

1 个答案:

答案 0 :(得分:4)

你不能直接这样做。但是,有一种解决方法(各种各样)。你可以使用一个带有“C”链接的函数,它返回指向类对象的指针 - 可能是动态分配的 - 转换为void*

你可以实现映射到类中函数的函数,但是需要一个额外的参数 - void*,这是从上面的调用创建函数获得的地址。他们只需将此void*转换为类的类型并将其称为成员。

最后,你需要一个可以删除指针的dispose函数。