从元组或可变参数模板参数创建数组初始值设定项
为了从元组或可变参数模板参数创建数组初始值设定项,编译时需要建立序列,可以通过使用可变参数模板来实现。
模板声明
首先定义以下模板:
<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...> {}; 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 type; };</code>
用法
到使用此技术,使用以下语法提供布局规范:
<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10] >, Entry< FooEnum, eFoo2, double > > layout;</code>
解压布局元组后,生成的数组可用于在运行时访问数据。
以上是如何从元组或可变参数模板参数创建数组初始值设定项?的详细内容。更多信息请关注PHP中文网其他相关文章!