我在我的visual studio里有两个项目: decoder和dec。一个包含C代码,另一个包含使用stl respectively.How的C++代码。我是否可以在解码项目中实例化c代码中的c++类?
for e.g.
//instantiating object
reprVectorsTree *r1 = new reprVectorsTree(reprVectors1,8);
//using one of its function
r1->decode(code);我需要为此做些什么?
如何访问其他项目中的文件?
如何在C文件中使用现有的c++代码?
-edit-我有一个这样的类
class Node//possible point in our input space
{
public:
std::vector<float> valuesInDim;//values in dimensions
std::vector<bool> code;
Node(std::vector<float>value);
Node::Node(float x, float y);
Node::Node(std::vector<float> value,std::vector<bool> binary);
};如何在c++中使用上面的类?如果C只允许结构体,我如何将其映射到结构体?
发布于 2012-08-15 22:29:59
给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
}
#endifmagic_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。)
发布于 2012-08-15 22:27:24
使用C++导出的functions.And创建实例化C++对象的包装器,然后从C代码中调用这些函数来生成对象。
由于一个是面向函数的,另一个是面向对象的,你可以在你的包装器中使用一些想法:
A few other ways.
发布于 2012-08-15 22:31:28
您需要用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);
}https://stackoverflow.com/questions/11971063
复制相似问题