【发布时间】:2019-08-22 10:17:53
【问题描述】:
我有一个 SPI 测试类,我正在尝试使其灵活,以便用户能够更改\设置作为 SpiTest 类私有成员的 Tx 和 Rx 缓冲区的大小。
我通过const_cast 等尝试了几种方法,但编译器每次都会给出不同类型的错误。
什么是使我的SpiTest 类足够灵活以向用户提供可用于更改缓冲区大小的函数的最佳方法,或者可以只设置一次缓冲区的大小,但由客户端/用户设置。甚至在创建测试对象后初始化一次大小就足够了。
任何想法都将受到高度赞赏。
我试过了
- 使用 Tx_size 成员作为静态然后它抱怨 constness 1b- 使 Tx_size const 抱怨使用 SetTxSize() 方法无法设置大小。
- 在构造函数中初始化它不是优势。
- 应用 const_cast 但这仅适用于更改指针类型 consts
-
这是我的课:
class SPITest { public: SPITest(); ~SPITest() = default; uint8_t* GetTxBuf(void) { return &TX_m[0]; } uint8_t* GetRxBuf(void) { return &RX_m[0]; } uint8_t GetTxSize(void) { return Tx_Size; } void SetTxSize(uint8_t size) { Tx_Size= (size); } private: static uint8_t Tx_Size = 6; uint8_t TX_m[Tx_Size]; uint8_t RX_m[Tx_Size]; };
错误如下:
错误[Pe1592]:具有类内初始化程序的成员必须是 const
错误[Pe028]:表达式必须有一个常量值
【问题讨论】:
-
如果您需要动态大小,请使用
std::vector -
将
std::vector<uint8_t>用于TX_m和RX_m。 -
@πάνταῥεῖ 有一次我比你快:P
-
@以前这很容易发生,我是个老人;-)
-
或者:
template <size_t BufferSize> class SPITest { std::array<uint8_t, BufferSize> buffer; };- 您可以在定义对象时指定大小,但在运行时无法更改。