首页  >  文章  >  后端开发  >  如何使用 C 中的可变参数模板计算自动数组偏移量?

如何使用 C 中的可变参数模板计算自动数组偏移量?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-02 21:58:30524浏览

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