"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 컴파일 타임 정적 배열을 동적으로 생성하는 데 C ++ 메타 프로 그램을 사용할 수 있습니까?

컴파일 타임 정적 배열을 동적으로 생성하는 데 C ++ 메타 프로 그램을 사용할 수 있습니까?

2025-02-06에 게시되었습니다
검색:185

Can C   Metaprogramming Be Used for Dynamically Creating Compile-Time Static Arrays?

C

문제 소개에서 컴파일 시간에 정적 배열을 프로그래밍 방식으로 생성합니다

전통적으로 C의 정적 배열은 고정 시간을 사용하여 컴파일 시간에 정의 할 수 있습니다. 크기 어레이. 그러나 특정 시나리오의 경우 컴파일 시간에 프로그래밍 방식으로 값을 할당하는 것이 바람직 할 수 있습니다. 이 기사는 정적 배열의 동적 생성을 달성하기 위해 메타 프로 그램 기술을 탐색합니다.

질문 1 : 프로그래밍 방식으로 값을 할당

C 0x 기능을 사용하여 템플릿의 로컬 또는 멤버 배열을 초기화 할 수 있습니다. 변수 템플릿 인수 목록. 이 해결 방법은 최대 템플릿 인스턴스티션 깊이로 인한 제한 사항이 있습니다.

질문 2 : 선택적 값 할당

컴파일 시간에 값을 선택적으로 할당하려면 변수 템플릿과 메타 기능의 조합을 사용할 수 있습니다. Metafunc 템플릿은 인덱스에 기초하여 일련의 값을 생성하는 매개 변수 팩 역할을합니다. Generate_array 템플릿은 생성 된 값을 사용하여 원하는 크기의 배열을 만들 수 있습니다.

예제 구현

template struct MetaFunc { enum { value = index   1 }; };

template class F> 
struct generate_array {
    typedef typename generate_array_impl::result result;
};

template class F, unsigned... args> 
struct generate_array_impl {
    typedef typename generate_array_impl::value, args...>::result result;
};

template

사용 예

void test() {
    const size_t count = 5;
    typedef generate_array::result A;

    for (size_t i = 0; i  

이 예제이 예제는 metafunc metafunction을 사용하여 컴파일 시간에 할당 된 값 {1, 2, 3, 4, 5}의 정적 배열 5를 정의합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3