簡體   English   中英

訪問 class linitalizer 列表中的結構元素

[英]Access struct elements in a class linitalizer list

我正在使用 EFM32GG11 系列微控制器進行嵌入式系統項目。 在項目中,我必須從多個串口讀取數據,處理數據並通過以太網將數據轉發到服務器。

我創建了一個 class 來處理串口。 將創建此 class 的多個 object。

我創建了一個帶有初始化列表的構造函數。 我有一個問題:他們是一種直接訪問初始化列表中結構成員的方法嗎? - 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 之前,我們只能在成員初始化器列表中初始化數據成員本身,不能進一步指定其子對象。

如果你知道端口的默認值應該是什么,你可以這樣做,假設端口被初始化為nullptr或其他東西:

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 {nullptr, baud_rate}, parity(parity), stop_bit(stop_bit), single_line_mode(single_line_mode),
            block_time(block_time)
{
      ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM