>백엔드 개발 >C++ >C 0x 메타프로그래밍 기술을 사용하여 컴파일 타임에 정적 배열에 프로그래밍 방식으로 값을 할당할 수 있습니까?

C 0x 메타프로그래밍 기술을 사용하여 컴파일 타임에 정적 배열에 프로그래밍 방식으로 값을 할당할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 06:09:10692검색

Can C  0x Metaprogramming Techniques be Used to Programmatically Assign Values to Static Arrays at Compile Time?

C에서 컴파일 타임에 프로그래밍 방식으로 정적 배열 생성

C에서 컴파일 타임에 정적 배열을 정의할 수 있는 능력이 있다면 다음이 가능합니까? 메타 프로그래밍을 사용하여 프로그래밍 방식으로 값을 할당합니다. 기술?

질문 1: 배열 값의 프로그래밍 방식 할당

예, C 0x 기능을 사용하면 컴파일 타임에 배열 요소를 "프로그래밍 방식으로" 초기화하는 것이 가능합니다. 다음 예를 고려하십시오.

template<unsigned... args>
struct ArrayHolder {
    static const unsigned data[sizeof...(args)];
};

template<unsigned... args>
const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };

질문 2: 배열 값의 선택적 할당

배열에 몇 가지 예외를 제외하고 반복되는 값이 포함되어 있다고 가정하면 선택적으로 할당이 가능합니다. 프로그래밍 방식으로 값:

template<size_t N, template<size_t> class F, unsigned... args>
struct generate_array_impl {
    typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};

template<template<size_t> class F, unsigned... args>
struct generate_array_impl<0, F, args...> {
    typedef ArrayHolder<F<0>::value, args...> result;
};

template<size_t N, template<size_t> class F>
struct generate_array {
    typedef typename generate_array_impl<N-1, F>::result result;
};

반복되는 배열 사용법 요소 2와 3을 제외한 0:

template<size_t index>
struct MetaFunc {
    enum { value = index == 2 || index == 3 ? index + 1 : 0 };
};

void test() {
    const size_t count = 7;
    typedef generate_array<count, MetaFunc>::result A;

    for (size_t i=0; i<count; ++i)
        std::cout << A::data[i] << "\n";
}

이러한 솔루션은 최대 템플릿 인스턴스화 깊이로 제한되지만 프로그래밍 방식 배열 생성 및 초기화에 대한 C 0x의 잠재력을 보여줍니다.

위 내용은 C 0x 메타프로그래밍 기술을 사용하여 컴파일 타임에 정적 배열에 프로그래밍 방식으로 값을 할당할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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