重写从 c 结构继承的函数

Override inherited function from c struct

本文关键字:函数 继承 结构 重写      更新时间:2023-10-16

好吧,所以我在 one.h 中有这个结构

typedef struct NWK_DataReq_t
{
    uint16_t     dstAddr;
    uint8_t      options;
    uint8_t      *data;
    uint8_t      size;
    void         (*confirm)(struct NWK_DataReq_t *req);
} NWK_DataReq_t;

稍后,在 two.h 中,有一些结构继承自 NWK_DataReq_t

#include "one.h"
struct commandReq_t : public NWK_DataReq_t {
    ...
}
struct dataReq_t : public NWK_DataReq_t {
    ...
}

我的目标是继承NWK_DataReq_t的结构,同时为某些NWK_DataReq_t变量设置默认值并向结构中添加变量。到目前为止,为变量分配默认值按预期工作。我遇到麻烦的一点是分配(*确认)功能。

struct commandReq_t : public NWK_DataReq_t {
    uint16_t   dstAddress  = 2;
    uint8_t    options     = 8;
    void       confirm     = commandReqConf;
    char       newVar[20]   = "Hello";
} commandReq;
...
void commandReqConf(NWK_DataReq_t *req);

我不知道如何设置默认函数来覆盖它。我的目标是将commandReqConf设置为(*confirm)函数并NWK_DataReq_t传递它。

我希望这是有道理的,任何帮助都会很棒。

我直言,正如您编写struct commandReq_t : public NWK_DataReq_t {并将问题标记为 C++ 一样,您现在处于 C++ 世界中。

恕我直言,初始化对象的最简单方法是在构造函数中:

struct commandReq_t : public NWK_DataReq_t {
    commandReq_t() { // default ctor
        dstAddr = 2;
        options = 8;
        strcpy(newVar, "Hello");
        confirm     = &commandReqConf;
    }
    char       newVar[20];  // initialized at ctor initialization time
} commandReq;
...
static void commandReqConf(NWK_DataReq_t *req);

由于函数commandReqConf实际上是类CzarController的成员,它应该是静态的 - 但如果它包含在与结构相同的类中,则不需要对其进行限定。

uint16_t   dstAddress  = 2;
uint8_t    options     = 8;
void       confirm     = commandReqConf;
char       newVar[20]   = "Hello";

commandReq_t的定义中是struct的成员。他们是额外的成员。它们不会覆盖 NWK_DataReq_t 中的成员。鉴于此,该行

void       confirm     = commandReqConf;

在两个方面是错误的。

  1. 不能创建类型为 void 的成员变量。
  2. 不能分配向 confirm 返回void的函数。

您需要做的是在构造函数中设置成员的值。

struct commandReq_t : public NWK_DataReq_t {
   commandReq_t()
   {
      dstAddr = 2;
      options = 8;
      confirm = commandReqConf;
      strcpy(newVar, "Hello");
   }
   char  newVar[20];
} commandReq;