如何在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的,而另一个是面向对象的,你可以在你的包装器中使用一些想法: –
- 为了复制类成员,将等效的预定结构从C代码传递到相应的C ++函数以获取数据。
- 尝试使用函数指针,因为它会降低成本,但要小心它们也可以被利用。
其他一些方法。
你需要在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); }