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 중국어 웹사이트의 기타 관련 기사를 참조하세요!