如何在结构初始值设定项列表中实例化类

How to instantiate class inside struct initializer list

本文关键字:列表 实例化 结构      更新时间:2023-10-16

给定一个结构:

typedef struct
{
enum IndicatorType model;
enum Cards cardIs[NUMBER_OF_CARD_SLOTS];
uint8_t NumberOfS;
HardwareTimers HwTimer;
Buzzer buzzer;
}indicator;

蜂鸣器类实例化为:

Buzzer::Buzzer(HardwareTimers* hwTimer)

如何使用初始值设定项列表实例化结构?

我尝试过的:

indicator ind =//ind is short for indicator.
{
.model              = INDICATOR_MODEL_UNKNOWN,
.cardIs             = {UNKNOWN_CARD},
.NumberOfScales     = 0
};

给出"无法将'大括号括起来的初始值设定项列表(('从'大括号括起来的初始值设定项列表'转换为'蜂鸣器'">

我不确定如何将蜂鸣器添加到初始值设定项列表中并传递给作为结构一部分的硬件计时器。

有什么想法吗?

为什么不把indicator变成一个类呢?如果Buzzer具有成员函数,则无法从结构"对象"调用这些函数。如果创建一个新的Indicator类并将其实例化,则可以创建一个Buzzer子类,并保留它在此处尝试执行的所有相同功能。

假设您使用的是C++20,这样的事情应该可以工作:

struct Indicator
{
enum IndicatorType model;
enum Cards cardIs[NUMBER_OF_CARD_SLOTS];
uint8_t NumberOfS;
HardwareTimers HwTimer;
Buzzer buzzer;
};
Indicator ind // <- No equals sign
{
.model              = INDICATOR_MODEL_UNKNOWN,
.cardIs             = {UNKNOWN_CARD},
.NumberOfScales     = 0,
// ...
};

C++无法动态初始化枚举和任何编译时已解决声明

可以通过静态使用模板来精细地完成