튜플 또는 Variadic 템플릿 매개변수에서 배열 이니셜라이저 생성
Variadic 템플릿은 배열 초기화에서 자동 오프셋 계산의 필요성에 대한 솔루션을 제공합니다. . 각 요소를 식별자와 크기로 표시함으로써 오프셋 계산을 구동하는 시퀀스를 생성할 수 있습니다.
항목을 보관하기 위해 레이아웃 구조가 사용됩니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!