如何在c中使用c ++对象?

我的视觉工作室有2个解码器和dec项目。 一个有C代码,另一个有分别使用stl的C ++代码。如何在解码项目中的c代码中实例化c ++类?

for eg //instantiating object reprVectorsTree *r1 = new reprVectorsTree(reprVectors1,8); //using one of its function r1->decode(code); 

我需要做些什么呢?

如何从其他项目访问文件?

如何在C文件中使用现有的c ++代码?

——–编辑———-我有一个这样的课

 class Node//possible point in our input space { public: std::vector valuesInDim;//values in dimensions std::vector code; Node(std::vectorvalue); Node::Node(float x, float y); Node::Node(std::vector value,std::vector binary); }; 

如何在c ++中使用上面的类? 如果C只允许结构,我如何将它映射到结构?

为C ++模块提供一个C接口:

magic.hpp:

 struct Magic { Magic(char const *, int); double work(int, int); }; 

magic.cpp 🙁实施Magic 。)

magic_interface.h:

 struct Magic; #ifdef __cplusplus extern "C" { #endif typedef Magic * MHandle; MHandle create_magic(char const *, int); void free_magic(MHandle); double work_magic(MHandle, int, int); #ifdef __cplusplus } #endif 

magic_interface.cpp:

 #include "magic_interface.h" #include "magic.hpp" extern "C" { MHandle create_magic(char const * s, int n) { return new Magic(s, n); } void free_magic(MHandle p) { delete p; } double work_magic(MHandle p, int a, int b) { return p->work(a, b); } } 

现在一个C程序可以#include "magic_interface.h"并使用代码:

 MHandle h = create_magic("Hello", 5); double d = work_magic(h, 17, 29); free_magic(h); 

(您甚至可能希望将MHandle定义为void *并在任何地方添加强制转换,以避免在C头中声明struct Magic 。)

使用C ++导出的函数创建用于实例化C ++对象的包装器。然后从C代码调用这些函数来生成对象。

由于一个是面向function的,而另一个是面向对象的,你可以在你的包装器中使用一些想法: –

  1. 为了复制类成员,将等效的预定结构从C代码传递到相应的C ++函数以获取数据。
  2. 尝试使用函数指针,因为它会降低成本,但要小心它们也可以被利用。

其他一些方法。

你需要在C中写一个包装器。

像这样的东西:

在class.h中:

 struct A{ void f(); } 

在class.cpp中:

 void A::f(){ } 

wrapper.cpp:

 #include "wrapper.h" void fWrapper(struct A *a){a->f();}; struct A *createA(){ A *tmp=new A(); return tmp; } void deleteA(struct A *a){ delete a; } 

C的wrapper.h:

 struct A; void fWrapper(struct A *a); A *createA(); 

C程序:

 #include "wrapper.h" int main(){ A *a; a=createA(); fWrapper(a); deleteA(a); }