C++ 仅使用结构名称访问结构成员
我不知道我在问什么类型的问题,但我只需要一些建议或想法来找到答案 我有很多结构和大量的成员,如下所示C++ 仅使用结构名称访问结构成员,c++,oop,struct,printf,C++,Oop,Struct,Printf,我不知道我在问什么类型的问题,但我只需要一些建议或想法来找到答案 我有很多结构和大量的成员,如下所示 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; :
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
在此之后,我想将数据发送到所选寄存器。
有人能给我一些建议吗?我只是不想再复制粘贴注册名,因为我的代码长度会更大,所以为了避免它,我需要建议。您可以为每个
库
类型单独实现此功能,然后使用继承,例如
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=size\u t;
使用Dump=std::无序映射;
结构银行{
虚拟转储()常量=0;
};
结构Bank0:公共银行{
Dump()常量重写{
返回转储();
}
};
结构银行1:公共银行{
Dump()常量重写{
返回转储();
}
};
<代码> >请只选择C或C++中的一个。它们是不同的语言,答案可能会有所不同,这取决于实际使用的语言。有一种方法可以通过预处理器魔术做到这一点。但只有当这些长长的成员名单定期变化时,这才是值得努力的。如果不是这样,那么您最好重复代码,并且可以通过在IDE编辑器中复制粘贴来重复代码。所以,让我知道你是否预测必须反复改变结构。如果我确信我可以挖到我的印前魔杖…@kaylum我想用c++@Yunnosch是的,一些银行的一些寄存器会定期更改,但不是全部register@GaneshKhose你坚持使用C++的PrtTf吗?它显示了在“ValueType”和“转储”之前预期的嵌套名称说明符的错误。在使用ValueType=size\t时,我应该在size\u t中输入什么;C++不支持框外的反射。您可以自己在一些数据结构或类方法中枚举它们,并作为无序映射返回