我正在实现一个基于c ++类的库文件。我需要将此库链接到c文件和c ++文件。我想,从c ++文件中实例化类将没有问题。我确实找到了一种从c文件实例化类的方法,但似乎我需要在函数调用时每次传递对象。有没有办法可以直接在c文件中使用实例化对象来调用成员函数?
找到下面的代码示例,
Myclass.h
#ifndef __MYCLASS_H
#define __MYCLASS_H
class MyClass {
private:
int m_i;
public:
void int_set(int i);
int int_get();
};
#endif
MyClass.cc
#include "MyClass.h"
void MyClass::int_set(int i) {
m_i = i;
}
int MyClass::int_get() {
return m_i;
}
MyMain_c ++。CC
#include "MyClass.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
MyClass *c = new MyClass();
c->int_set(3);
cout << c->int_get() << endl;
delete c;
}
MyWrapper.h
#ifndef __MYWRAPPER_H
#define __MYWRAPPER_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct MyClass MyClass;
MyClass* newMyClass();
void MyClass_int_set(MyClass* v, int i);
int MyClass_int_get(MyClass* v);
void deleteMyClass(MyClass* v);
#ifdef __cplusplus
}
#endif
#endif
MyWrapper.cc
#include "MyClass.h"
#include "MyWrapper.h"
extern "C" {
MyClass* newMyClass() {
return new MyClass();
}
void MyClass_int_set(MyClass* v, int i) {
v->int_set(i);
}
int MyClass_int_get(MyClass* v) {
return v->int_get();
}
void deleteMyClass(MyClass* v) {
delete v;
}
}
MyMain_c.c
#include "MyWrapper.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
struct MyClass* c = newMyClass();
MyClass_int_set(c, 3); // issue : i need to send the object
everytime
// c->int_set(3); any ways of using like this??
printf("%i\n", MyClass_int_get(c));
deleteMyClass(c);
}
答案 0 :(得分:-1)
#include "MyClass.h"
#include "MyWrapper.h"
extern "C" {
MyClass* newMyClass() {
return new MyClass();
}
void MyClass_int_set(MyClass* v, int i) {
v->int_set(i);
}
int MyClass_int_get(MyClass* v) {
return v->int_get();
}
void deleteMyClass(MyClass* v) {
delete v;
}
}