【问题标题】:Access structure members by using structure name only仅使用结构名称访问结构成员
【发布时间】:2020-02-15 06:55:25
【问题描述】:

我不知道我要问什么类型的问题。但我只需要建议或想法就能找到方法。

我有很多结构和大量成员,如下所示

typedef struct _Bank0
{
unsigned char main_control_char;
unsigned short input_port_short;
:
:
}Pack Bank0;

typedef struct _Bank1
{
unsigned char ddr3_control_char;
unsigned char ddl_control_char;
:
:
}Pack Bank1;

我想为这个寄存器组写一个测试函数,如果我给出组号(即结构名称)它应该显示该组中的所有寄存器。

我只需要避免重复编程测试寄存器,我正在尝试以下方式

select register bank= Bank1(* user  will enter this value) //
//now i want to show all register name in bank 1 for example//
ddr3_control_char
ddl_control_char

之后我想将数据发送到选定的寄存器。 任何人都可以建议我任何想法。我只是不想再次复制粘贴寄存器名称,因为我的代码长度会更长,以避免它我想要建议。

【问题讨论】:

  • 请仅选择 C ​​或 C++ 之一。它们是不同的语言,根据实际使用的语言,答案可能会有所不同。
  • 有一种方法可以使用预处理器魔法来做到这一点。但这只有在那些长长的成员名单定期变化时才值得付出努力。如果没有,那么您最好重复代码,并且可以通过在 IDE 编辑器中复制粘贴来重复代码来妥协。所以,让我知道您是否预计必须反复更改结构。如果我确信我可以挖掘出我的 prepro 魔杖......
  • @kaylum 我想用 c++ 做
  • @Yunnosch 是的,某些银行的某些寄存器会定期更改,但并非所有寄存器
  • @GaneshKhose 你坚持在 C++ 中使用 printf 吗?

标签: c++ oop struct printf


【解决方案1】:

您可以为每个Bank 类型单独实现此功能,然后使用继承,例如

using ValueType = size_t;
using Dump = std::unordered_map<std::string, Value_type>;
struct Bank {
    virtual Dump dump() const = 0;
};
struct Bank0 : public Bank {
    Dump dump() const override {
        return Dump();
    }
};
struct Bank1 : public Bank {
    Dump dump() const override {
        return Dump();
    }
};

【讨论】:

  • 它在“ValueType”和“Dump”之前显示预期嵌套名称说明符的错误。还有我应该在 size_t 中使用 ValueType = size_t 输入什么;
  • C++ 不支持开箱即用的反射。您可以在某些数据结构或类方法中自己枚举它们并以unordered_map 的形式返回
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多