> 백엔드 개발 > C++ > 본문

C에서 가변 템플릿을 사용하여 자동 배열 오프셋을 어떻게 계산합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-02 21:58:30
원래의
521명이 탐색했습니다.

How do you calculate automatic array offsets using variadic templates in C  ?

튜플 또는 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::type은 데이터 레이아웃을 표현하는 튜플을 나타냅니다. 그런 다음 인덱스 기술을 사용하여 항목의 압축을 풀어 std::array를 구성하는 데 이 결과를 사용할 수 있습니다.

위 내용은 C에서 가변 템플릿을 사용하여 자동 배열 오프셋을 어떻게 계산합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿