Mencipta Pemula Tatasusunan daripada Parameter Templat Tuple atau Variadic
Templat variadik menawarkan penyelesaian kepada keperluan pengiraan offset automatik dalam permulaan tatasusunan . Dengan mewakili setiap elemen sebagai pengecam dan saiznya, jujukan boleh dibuat yang memacu pengiraan offset.
Struktur Reka Letak digunakan untuk menyimpan entri:
<code class="cpp">template<std::size_t offset, typename Key, typename... Entries> struct LayoutHelper { typedef std::tuple<> type; }; template<typename Key, typename... Entries> struct Layout:LayoutHelper<0, Key, Entries...> {};</code>
Setiap entri mempunyai pengecam dan jenis atau saiz:
<code class="cpp">template<typename Key, Key identifier, typename Data> struct Entry {};</code>
Untuk membuat entri yang diproses, kami melanjutkan konsep:
<code class="cpp">template<std::size_t offset, typename Key, Key id0, typename D0, typename... Entries> struct LayoutHelper<offset, Key, Entry<Key, id0, D0>, Entries...> { typedef typename prepend < ProcessedEntry< Key, id0, D0, offset > , typename LayoutHelper<offset+sizeof(D0), Key, Entries...>::type > type; };</code>
Penggunaan kelihatan seperti ini:
<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10] >, Entry< FooEnum, eFoo2, double > > layout;</code>
Selepas mencari pelaksanaan prapend yang menambahkan elemen pada bahagian hadapan tuple, Layout
Atas ialah kandungan terperinci Bagaimanakah anda mengira offset tatasusunan automatik menggunakan templat variadic dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!