從元組或可變參數模板參數建立數組初始化器
可變參數模板為數組初始化中自動偏移計算的需求提供了解決方案。透過將每個元素表示為標識符及其大小,可以建立一個序列來驅動偏移量的計算。
採用佈局結構來保存條目:
<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
以上是如何使用 C 中的可變參數模板計算自動數組偏移量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!