我正在尝试制作一个类,我们可以在其中对来自 char* 的不同结构进行编码和解码。
我正在按照以下方式执行此操作,我制作了一个摘要 名为 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++ 不识别虚拟结构。我可以将编码和解码函数移动到每个扩展类,但由于它们很多,这会导致代码重复。是否存在能够像这样使用编码和解码函数的简洁方法?
最佳答案
听起来(如果我错了请纠正我)就像你在尝试重新实现类似 Protocol Buffers 的东西( Protocol Buffer )。 您可以结合使用 protobuf 消息、子消息和 extensions实现您的目标。
Protobufs 也很容易 converted to & parsed from文本和二进制表示。
关于c++ - 如何在 C++ 中调用泛型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41613334/