对于RAM优化目的,我需要将我的数据存储为std::array<char, N>
,其中N是&#34;模板化size_t&#34;数组的大小。
我需要管理大量的&#34; Line&#34;包含任何类型数据的对象(数字和字符)。
所以我的Line类是:
template<size_t NByte>
class Line {
public:
Line (std::array<char, NByte> data, std::vector<size_t> offset) :
_data(data), _offset(offset) {}
template<typename T>
T getValue (const size_t& index) const {
return *reinterpret_cast<const T*>(_data.data() + _offset[index]);
}
template<typename T>
void setValue (const size_t& index, const T value) const {
char * new_value = const_cast<char *>(reinterpret_cast<const char *>(&value));
std::move(new_value, new_value + sizeof(T), const_cast<char *>(_data.data() + _offset[index]));
}
private:
std::array<char, NByte> _data;
std::vector<size_t> _offset;
};
我的问题是:
编辑:背后的问题是:是否有其他方法可以在内存中处理二进制数据并提供人类可理解的&#34;最终用户通过setter和getter的界面?
答案 0 :(得分:1)
在生产/发布中使用此代码有什么问题吗?
是的,此代码与平台有关。
数据将以不同方式存储在Big-Endian平台和Little-Endian平台中。
如果你指望两个系统相互通信(发送和接收这些数据),那么你必须确保双方都使用相同Endianness的平台。