gpt4 book ai didi

c++ - 给定类型的模板化中间数组

转载 作者:行者123 更新时间:2023-11-30 02:18:48 26 4
gpt4 key购买 nike

我有一个包含函数的库:

// Gets [bytes] number of *bytes* and fills rx_buff
void getData(uint8_t* rx_buff, uint16_t bytes);

我还有一个正在为其编写接口(interface)的库,结构比较简单( protected IP,所有名称都是虚构的):

[libGetData] <-> libMyLib <-> [libDoStuff]

我无法修改 libGetData,也无法更改 libDoStuff。libDoStuff 有许多函数,如下所示:

bool isDataGood8(uint8_t input);
bool isDataGood16(uint16_t input);
bool isDataGood32(uint32_t input);
bool isDataGood64(uint64_t input);

我只想要一种干净的方法来实现 getData() 和所有类型的 isDataGoodXX() 之间的中间函数。

template <typename T>
T getValue()
{
// Create intermediate array for getData
uint8_t temp_array[sizeof(T)];
// Fill temp_array
getData(&temp_array, sizeof(T));
// Create value type to hold byte-array
T return_val;
// Copy array data into integer type
std::memcpy(&return_val, temp_array, sizeof(T));
return return_val;
}

这个模板是有效的解决方案吗?

最佳答案

是的,这段代码几乎是正确的,只有一点点异常(exception)。您对 getData 的调用应如下所示:

getData(temp_array, sizeof(T));

您不应该将array 的地址传递到您的getValue 函数中。除此之外,它还不错,并且不会遇到常见的严格混叠违规问题。

您还避免了任何对齐问题,并且代码已尽可能优化 API。

关于c++ - 给定类型的模板化中间数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com