首頁  >  文章  >  後端開發  >  如何使用 C 中的可變參數模板計算自動數組偏移量?

如何使用 C 中的可變參數模板計算自動數組偏移量?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 21:58:30522瀏覽

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

從元組或可變參數模板參數建立數組初始化器

可變參數模板為數組初始化中自動偏移計算的需求提供了解決方案。透過將每個元素表示為標識符及其大小,可以建立一個序列來驅動偏移量的計算。

採用佈局結構來保存條目:

<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>

每個條目具有識別符和類型或大小:

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

要創建已處理的條目,我們擴展了概念:

<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>

用法如下所示:

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

找到將元素加入元組前面的prepend 實作後,Layout::type 將表示一個表示資料佈局的元組。然後可以透過使用索引技術解壓縮條目來使用此結果來建構 std::array。

以上是如何使用 C 中的可變參數模板計算自動數組偏移量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn