是否有关于元组伪成员的布局和内存对齐的正式规范?
反正有没有修改元组中类型的内存对齐?它是否受#pragma pack()指令的影响?
例如:
typedef std::tuple<uint8_t, uint32_t> myTuple;
Run Code Online (Sandbox Code Playgroud)
是否有任何规范说这将在内存中与以下相同:
#pragma pack() // Default packing
struct myStruct
{
uint8_t first;
uint32_t second;
}
Run Code Online (Sandbox Code Playgroud)
抱歉,如果这是一个愚蠢的问题,但我不完全理解模板的对齐.
编辑:我正在努力完成的例子
目前我有一些东西......
#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);
Run Code Online (Sandbox Code Playgroud)
如果我想为元编程目的使用typedef …
我可以安全地使用glm ::*类型(例如vec4,mat4)来填充顶点缓冲区对象吗?
std::vector<glm::vec3> vertices;
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
我不太确定,因为在我看来,struct padding(成员对齐)可能会导致一些麻烦,尽管我测试的所有编译器都会返回预期的大小.
我正在为C++ 11编译器开发(也许这会有所不同).