Я пытаюсь создать класс, в котором мы можем кодировать и декодировать разные структуры из и в char *.Как вызвать generic struct в C++
Я делаю это следующим образом, я сделал абстрактное общий класс, называемый CANgenericMsg с CANgenericMsg.cpp быть:
#include "CANgenericMsg.h"
CANgenericMsg::CANgenericMsg() {
// TODO Auto-generated constructor stub
}
void CANgenericMsg::decode(char* chars) {
CANgenericMsg::str* data = reinterpret_cast<CANgenericMsg::str*>(chars);
structure = *data;
}
char* CANgenericMsg::encode() {
return reinterpret_cast<char*>(&structure);
}
CANgenericMsg::~CANgenericMsg() {
// TODO Auto-generated destructor stub
}
И с заголовком:
class CANgenericMsg {
public:
CANgenericMsg();
void decode(char* chars);
virtual ~CANgenericMsg();
char* encode();
virtual struct str structure;
};
Этот класс является расширенные действительными классами, такими как CANintegermsg, в которых конструктор этого класса содержит структуру:
class CANintegermsg: public CANgenericMsg {
public:
CANintegermsg(int i);
virtual ~CANintegermsg();
struct str {
unsigned short int my_int;
} structure;
};
Идея состоит в том, что вы можете установить определенный тип структуры в каждом расширенном классе. Проблема в том, что C++ не распознает виртуальные структуры. Я мог перемещать функции кодирования и декодирования в каждый расширенный класс, но поскольку их много, это приведет к дублированию кода. Существует ли опрятный способ использовать функции кодирования и декодирования, подобные этому?
Рассмотрите также SWIG или IDL, такие как XPCOM или DCE/RPC IDL. – Ben