Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 仅使用结构名称访问结构成员_C++_Oop_Struct_Printf - Fatal编程技术网

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++不支持框外的反射。您可以自己在一些数据结构或类方法中枚举它们,并作为
无序映射返回