我可以用字符串文字初始化 std::array<uint8_t 吗?
Can I initialize a std::array<uint8_t with a string literal?
我编写了很多使用 UART 串行端口与仪器交互的 C 代码。我正在开始一个新项目,我试图在 C++ 中使用更面向对象的方法。以下是我过去使用 C 定义和发送命令的方式。
uint8_t pubx04Cmd[] = "$PUBX,04*37\r\n";
HAL_UART_Transmit(&hUART1, pubx04Cmd, sizeof(pubx04Cmd), 5000);
这非常简单。 C++ std::array
s 具有内置的大小,这似乎很有用。但这是我想出的唯一方法。
const char pubx04CString[] = "$PUBX,04*37\r\n";
std::array<uint8_t, 14> pubx04CPPArray;
std::copy(std::begin(pubx04CString), std::end(pubx04CString), pubx04CPPArray.begin());
HAL_UART_Transmit(&hUART1, pubx04CPPArray.data(), pubx04CPPArray.size(), 5000);
与 C 语言相比,这看起来很笨拙。
有没有更简洁的方法使用 std::array
来做到这一点?
在这种情况下使用 std::array
s 与 C 数组相比有什么真正的好处吗?
std::array
是一个聚合,即可能的实现可能像
template <typename T, size_t S>
struct array {
T a[S];
// ...
};
封闭的数组可以像往常一样初始化:
std::array<uint8_t, 14> pubx04Cmd{"$PUBX,04*37\r\n"};
我编写了很多使用 UART 串行端口与仪器交互的 C 代码。我正在开始一个新项目,我试图在 C++ 中使用更面向对象的方法。以下是我过去使用 C 定义和发送命令的方式。
uint8_t pubx04Cmd[] = "$PUBX,04*37\r\n";
HAL_UART_Transmit(&hUART1, pubx04Cmd, sizeof(pubx04Cmd), 5000);
这非常简单。 C++ std::array
s 具有内置的大小,这似乎很有用。但这是我想出的唯一方法。
const char pubx04CString[] = "$PUBX,04*37\r\n";
std::array<uint8_t, 14> pubx04CPPArray;
std::copy(std::begin(pubx04CString), std::end(pubx04CString), pubx04CPPArray.begin());
HAL_UART_Transmit(&hUART1, pubx04CPPArray.data(), pubx04CPPArray.size(), 5000);
与 C 语言相比,这看起来很笨拙。
有没有更简洁的方法使用
std::array
来做到这一点?在这种情况下使用
std::array
s 与 C 数组相比有什么真正的好处吗?
std::array
是一个聚合,即可能的实现可能像
template <typename T, size_t S>
struct array {
T a[S];
// ...
};
封闭的数组可以像往常一样初始化:
std::array<uint8_t, 14> pubx04Cmd{"$PUBX,04*37\r\n"};