c++ - 如何在 C++ 中调用泛型结构

标签 c++ generics struct can-bus

我正在尝试制作一个类,我们可以在其中对来自 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/

相关文章:

c++ - 你能在 ctor 中设置 weak_ptr<> 吗?

android - 从 Android 上的 NativeActivity fopen/fread APK 资源

java - 堆栈泛型类不起作用

c - 在这种情况下如何使用 struct

c++ - enable_if 和自动返回类型?

c# - 定义实现泛型的接口(interface)依赖

java - LinkedList(通用)中的删除方法有什么问题?

arrays - 如何使用 qsort 对结构体指针数组进行排序

go - 如何修改未知类型的结构中的字段?

C++ - 指定模板值类型