Я пишу небольшой Wrapper API, чтобы я мог вызвать C++
код (классы / функции) из C
.У меня проблема в том, что одна из моих C++
функций инициализируется в моем заголовке оболочки с "shared_ptr"
.
ClassName *ClassName _new(std::shared_ptr<Lib::Instance> p_Instance);
Так что, как вы можете видеть, файл оболочки заполнен в стиле C ++.Это плохо, потому что файл Wrapper should be readable by C AND C++
.
Это мой файл Wrapper.h:
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef struct ClassName ClassName;
ClassName *ClassName_new(std::shared_ptr<Lib::Instance> p_Instance);
void ClassName_setValue(ClassName* t, double p_value);
void ClassName_delete(ClassName* t);
#ifdef __cplusplus
}
#endif /* __cplusplus */
, а это мой файл Wrapper.cpp:
#include "Wrapper.h"
#include "ClassName.h"
extern "C"{
ClassName* ClassName_new(std::shared_ptr<Lib::Instance> p_Instance){
return new ClassName(p_Instance);
}
void ClassName_setValue(ClassName* t, double p_value){
t->setValue(p_value);
}
void ClassName_delete(ClassName* t){
delete t;
}
}
И это часть моего основного.Заголовок файла cpp:
class ClassName: public SDCLib::Util::Task {
public:
ClassName(std::shared_ptr<Lib::Instance> p_Instance);
virtual ~ClassName();
void setValue(double p_value);
...
.Cpp:
ClassName::ClassName(std::shared_ptr<Lib::Instance> p_Instance) ...
...
void ClassName::setValue(double p_value){
doSomething()
}
...
Мне не разрешено изменять структуру основного файла c ++, где я использую ClassName(std::shared_ptr<Lib::Instance> p_Instance);
У вас есть идеи, как я могу решить эту проблему?Может быть, написание второго Wrapper?
Редактировать: Вот ошибка Терминала:
Wrapper.h:21:45: error: expected ‘)’ before ‘:’ token
ClassName *ClassName_new(std::shared_ptr<Lib::Instance> p_Instance);
^