c++ - 如何在我的 C 代码中访问我的 C++ 函数,反之亦然?

标签 c++ c opencv cross-language

我想用 C 实现一个项目,但是用 C++ 编写项目的某些部分然后从主 C 调用它们很舒服em>代码。
可能吗?!如果是,我该怎么做?!
提前致谢:)

附言
我在我的 C++ 代码中使用了一些库,例如 OpenCV

最佳答案

您需要使用常规 C 函数“包装”您的 C++ 接口(interface),这些函数采用参数来指示将调用它们的对象。例如,如果你有 C++

class A
{
    // .. boilerplate stuff...
    int SomeMethod(int n, float f);
};

然后连同它,你可以声明一个函数,例如

extern "C" int A_SomeMethod(void* Obj, int n, float f)
{
    return(((A*)Obj)->SomeMethod(n, f));
}

如果您对 void* 的转换不满意,您可以实现某种从不透明句柄到 A* 的映射。但要点是您需要保留一些指向将调用该方法的对象的句柄/指针。为了获得指针/句柄,您需要将分配包装到:

extern "C" void* A_Instantiate()
{
    return new A;
}

C++ 文件应与具有上述功能的文件一起单独编译。 C 编译的单独包含应包含上述所有函数的声明。

编辑:下面的注意事项和评论很重要;回答这个问题,“是的,可以从 C 调用 C++”,这是一种方法。这不是一个完整的方法,因为没有真正的机械方法来做到这一点,但它是一个开始。此外,不要忘记为 delete 等创建另一个调用。

关于c++ - 如何在我的 C 代码中访问我的 C++ 函数,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452892/

相关文章:

c++ - 如何在不转换回基类类型的情况下返回其派生类型的对象?

c++ - 未显示继承类

c - 每次将复合文字分配给循环中的指针时是否都会创建一个新对象?

c++ - 将 C++ OpenCV 代码包装为 Python

opencv - 深度图像的大津阈值

opencv - 通过轮廓与特征进行物体识别

c++ - 模板的合格和不合格名称查找的不同行为

c - __cdecl LNK2019 VS2010 C

c - PC Lint 信息 825 抑制无法使用 Fallthrough 注释来工作

c++ - 使用 vector 对元音和辅音排序链接列表