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

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

Nov 02, 2024 pm 09:58 PM

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

튜플 또는 Variadic 템플릿 매개변수에서 배열 이니셜라이저 생성

Variadic 템플릿은 배열 초기화에서 자동 오프셋 계산의 필요성에 대한 솔루션을 제공합니다. . 각 요소를 식별자와 크기로 표시함으로써 오프셋 계산을 구동하는 시퀀스를 생성할 수 있습니다.

항목을 보관하기 위해 레이아웃 구조가 사용됩니다.

<code class="cpp">template&lt;std::size_t offset, typename Key, typename... Entries&gt;
struct LayoutHelper {
  typedef std::tuple&lt;&gt; type;
};
template&lt;typename Key, typename... Entries&gt;
struct Layout:LayoutHelper&lt;0, Key, Entries...&gt; {};</code>
로그인 후 복사

각 항목 식별자와 유형 또는 크기가 있습니다.

<code class="cpp">template&lt;typename Key, Key identifier, typename Data&gt;
struct Entry {};</code>
로그인 후 복사

처리된 항목을 생성하려면 개념을 확장합니다.

<code class="cpp">template&lt;std::size_t offset, typename Key, Key id0, typename D0, typename... Entries&gt;
struct LayoutHelper&lt;offset, Key, Entry&lt;Key, id0, D0&gt;, Entries...&gt;
{
    typedef typename prepend
        &lt; ProcessedEntry&lt; Key, id0, D0, offset &gt;
        , typename LayoutHelper&lt;offset+sizeof(D0), Key, Entries...&gt;::type
        &gt; type;
};</code>
로그인 후 복사

사용법은 다음과 같습니다.

<code class="cpp">Layout&lt; FooEnum, Entry&lt; FooEnum, eFoo, char[10] &gt;, Entry&lt; FooEnum, eFoo2, double &gt; &gt; layout;</code>
로그인 후 복사

튜플 앞에 요소를 추가하는 prepend 구현을 찾은 후 Layout::type은 데이터 레이아웃을 표현하는 튜플을 나타냅니다. 그런 다음 인덱스 기술을 사용하여 항목의 압축을 풀어 std::array를 구성하는 데 이 결과를 사용할 수 있습니다.

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 함수 형식 문자 케이스 변환 단계 C 언어 함수 형식 문자 케이스 변환 단계 Mar 03, 2025 pm 05:53 PM

C 언어 함수 형식 문자 케이스 변환 단계

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? Mar 03, 2025 pm 05:52 PM

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

Gulc : C 도서관은 처음부터 구축되었습니다 Gulc : C 도서관은 처음부터 구축되었습니다 Mar 03, 2025 pm 05:46 PM

Gulc : C 도서관은 처음부터 구축되었습니다

C 언어 기능의 정의 및 호출 규칙은 무엇이며 C 언어 기능의 정의 및 호출 규칙은 무엇이며 Mar 03, 2025 pm 05:53 PM

C 언어 기능의 정의 및 호출 규칙은 무엇이며

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까?

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? 메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? Mar 03, 2025 pm 05:51 PM

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까?

뚜렷한 사용 및 문구 공유 뚜렷한 사용 및 문구 공유 Mar 03, 2025 pm 05:51 PM

뚜렷한 사용 및 문구 공유

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?

See all articles