S0H*_*31L 6 c c++ opencv cross-language
我想在C中实现一个项目,但是用C++编写项目的某些部分然后从主C代码中调用它们很方便.
可能吗?!如果是的话,我怎么能这样做?!
提前致谢 :)
PS
我在我的 C++代码中使用了一些库,比如 OpenCV.
小智 4
您需要使用常规 C 函数“包装”您的 C++ 接口,这些函数采用参数来指示将调用它们的对象。例如,如果你有 C++
class A
{
// .. boilerplate stuff...
int SomeMethod(int n, float f);
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以声明一个函数,例如
extern "C" int A_SomeMethod(void* Obj, int n, float f)
{
return(((A*)Obj)->SomeMethod(n, f));
}
Run Code Online (Sandbox Code Playgroud)
如果您对 void* 的转换不满意,您可以实现某种从不透明句柄到A*. 但要点是您需要保留一些指向将调用该方法的对象的句柄/指针。为了获取指针/句柄,您需要将分配包装到:
extern "C" void* A_Instantiate()
{
return new A;
}
Run Code Online (Sandbox Code Playgroud)
C++ 文件应与具有上述功能的文件一起单独编译。C 编译的单独包含应该包含上述所有函数的声明。
编辑:下面的警告和评论很重要;回答这个问题,“是的,可以从 C 调用 C++”,这是一种方法。这不是一个完整的方法,因为没有真正的机械方法来做到这一点,但它是一个开始。delete另外,不要忘记为等创建另一个呼叫。