クラスを考えてみましょう:
template <typename T>
struct A{
//...many public member functions...
T x;
T y;
T z;
}
そして別の、同様:
template <typename T>
struct B{
//many public member functions
T x;
T y;
}
ここでは指定されていませんが、T
常にfloat
またはint
またはのいずれかになりますbool
。
ここで別の構造体を考えてみましょう:
struct Pair{
A<float> a;
B<float> b;
}
今vector
:
std::vector<Pair> bigBunch;
x
すべての, y
, z
inbigBunch
が連続していると仮定するのはどのくらい安全ですか? vector
s間の連続したメモリを保証することは知っていますが、パディングが発生する可能性があるため、必ずしも連続したメモリを保証するとは限らないPair
ことも知っています。ただし、パディングは、要素のタイプが異なるstruct
場合にのみリスクになると思いました。struct
へのポインターを取得して、 のコンテンツ全体bigBunch[0].a.x
で s の連続したストリームが期待できることを知りたいです。実際、へのポインターは、単に と言うのと同じ場所を指します。float
bigBunch
bigBunch[0].a.x
`bigBunch[0].a
Pair.a
とが同じタイプであるか異なるタイプであるか (この例では両方が同じタイプであるのではなく、s をPair.b
混合するなど) は問題になりますか?int
float
float