从元组或可变参数模板参数创建数组初始化器
可变参数模板为数组初始化中自动偏移计算的需求提供了解决方案。通过将每个元素表示为标识符及其大小,可以创建一个序列来驱动偏移量的计算。
采用布局结构来保存条目:
<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中文网其他相关文章!