Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah anda mengira offset tatasusunan automatik menggunakan templat variadic dalam C?

Bagaimanakah anda mengira offset tatasusunan automatik menggunakan templat variadic dalam C?

Mary-Kate Olsen
Lepaskan: 2024-11-02 21:58:30
asal
586 orang telah melayarinya

How do you calculate automatic array offsets using variadic templates in C  ?

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>
Salin selepas log masuk

Setiap entri mempunyai pengecam dan jenis atau saiz:

<code class="cpp">template<typename Key, Key identifier, typename Data>
struct Entry {};</code>
Salin selepas log masuk

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>
Salin selepas log masuk

Penggunaan kelihatan seperti ini:

<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10] >, Entry< FooEnum, eFoo2, double > > layout;</code>
Salin selepas log masuk

Selepas mencari pelaksanaan prapend yang menambahkan elemen pada bahagian hadapan tuple, Layout::type akan mewakili tuple yang menyatakan reka letak data. Hasil ini kemudiannya boleh digunakan untuk membina std::array dengan membongkar entri menggunakan teknik indeks.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan