元组的伪成员的布局和内存对齐是否有任何正式规范?
无论如何修改元组中类型的内存对齐方式?它受#pragma pack() 指令的影响吗?
例如:
typedef std::tuple<uint8_t, uint32_t> myTuple;
是否有任何规范表明这将在内存中与以下内容相同:
#pragma pack() // Default packing
struct myStruct
{
uint8_t first;
uint32_t second;
}
抱歉,如果这是一个愚蠢的问题,但在模板方面我并不完全理解对齐方式。
编辑:我正在尝试完成的示例
目前我有一些类似的东西......
#pragma pack(push)
#pragma pack(4)
struct cTriangle
{
uint32 Index[3];
};
#pragma pack(pop)
template <class T>
inline bool Read(cFileStream& fStream, std::vector<T>& vec)
{
if (!vec.size())
return true;
// fStream.Read(void* pBuffer, size_t Size)
// Just a wrapper around a binary ifstream really
return fStream.Read(&vec[0], sizeof(T) * vec.size());
}
std::vector<cVector3> vPoint;
vPoint.resize(Verticies);
bool result = Read(FileStream, vPoint);
如果我想将 typedefcTriangle
用于std::tuple<uint32, uint32, uint32>
元编程目的,我是否仍然能够读取/写入元组的原始内存(因此是元组的向量),或者该内存是否具有未知的对齐方式?