c++ - 访问类 linitalizer 列表中的结构元素
问题描述
我正在使用 EFM32GG11 系列微控制器进行嵌入式系统项目。在项目中,我必须从多个串口读取数据,处理数据并通过以太网将数据转发到服务器。
我创建了一个将处理串行端口的类。将创建此类的多个对象。
我创建了一个带有初始化列表的构造函数。我有一个问题:他们是一种直接访问初始化列表中结构成员的方法吗?- uart_init.baudRate(baud_rate)
class SerialPort {
public :
enum PortList{
COM1, //RS-232
COM2 //RS-232 -- 8 more ports
};
private:
PortList port_no;
UARTDRV_Init_t uart_init;
uint32_t baud_rate;
char parity;
uint8_t stop_bit;
bool single_line_mode;
uint16_t block_time; //in milli-seconds
public:
SerialPort(PortList port_no, uint16_t baud_rate, char parity, uint8_t stop_bit,
bool single_line_mode, uint16_t block_time) : port_no(port_no), uart_init.baudRate(baud_rate), parity(parity), stop_bit(stop_bit), single_line_mode(single_line_mode),
block_time(block_time)
{
//Further processing post initialization
}
};
UARTDRV_Init_t 结构:
typedef struct {
USART_TypeDef *port; ///< The peripheral used for UART
uint32_t baudRate; ///< UART baud rate
} UARTDRV_InitUart_t;
解决方案
您可以使用指定的初始化器(C++20 起)来指定要初始化的成员。例如
SerialPort(PortList port_no, uint16_t baud_rate, char parity, uint8_t stop_bit,
bool single_line_mode, uint16_t block_time) : port_no(port_no), uart_init {.baudRate=baud_rate}, parity(parity), stop_bit(stop_bit), single_line_mode(single_line_mode),
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
block_time(block_time)
{
//Further processing post initialization
}
在 C++17 之前,我们只能在成员初始化器列表中初始化数据成员本身,而不能进一步指定其子对象。
推荐阅读
- python - 使用 RNN 进行预测后,如何将我的预测转换为文本?
- java - 我想在单击 imageView 时打开 Adapter 类,但我得到 ActivityNotFoundException,还有其他方法吗?
- swift - 如何使用 NSMutableAttributedString 设置 UILabel(不是 UITextView)圆角背景?
- node.js - npm package-lock 文件是如何生成依赖树的?
- google-compute-engine - GCP 是否对外部静态 IP 收费?
- python - 如何使用自定义函数从 a-html 元素中提取文本?
- javascript - 尝试通过 fetch api 从 XML API 链接检索数据并得到解析器错误
- php - 更改 WooCommerce 订单付款页面标题
- ios - 使用 Unity 制作的 iOS 应用程序在加载 admob 视频广告时加载场景时崩溃
- javascript - d3.geoPath().projection 正在渲染黑色矩形而不是地图