タプルの疑似メンバーのレイアウトとメモリアライメントに関する正式な仕様はありますか?
タプル内の型のメモリアライメントを変更する方法はありますか?#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);
メタプログラミングの目的でtypedefを実行したい場合でも、タプルのrawメモリ(したがってタプルのベクトル)に対して読み取り/書き込みを行うことができますか、それともそのメモリの配置が不明ですcTriangle
か?std::tuple<uint32, uint32, uint32>