전통적으로 C의 정적 배열은 고정 시간을 사용하여 컴파일 시간에 정의 할 수 있습니다. 크기 어레이. 그러나 특정 시나리오의 경우 컴파일 시간에 프로그래밍 방식으로 값을 할당하는 것이 바람직 할 수 있습니다. 이 기사는 정적 배열의 동적 생성을 달성하기 위해 메타 프로 그램 기술을 탐색합니다.
C 0x 기능을 사용하여 템플릿의 로컬 또는 멤버 배열을 초기화 할 수 있습니다. 변수 템플릿 인수 목록. 이 해결 방법은 최대 템플릿 인스턴스티션 깊이로 인한 제한 사항이 있습니다.
컴파일 시간에 값을 선택적으로 할당하려면 변수 템플릿과 메타 기능의 조합을 사용할 수 있습니다. Metafunc 템플릿은 인덱스에 기초하여 일련의 값을 생성하는 매개 변수 팩 역할을합니다. Generate_array 템플릿은 생성 된 값을 사용하여 원하는 크기의 배열을 만들 수 있습니다.
templatestruct 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 class F, unsigned... args> struct generate_array_impl::value, args...> result; }; template<unsigned... args> struct ArrayHolder { static const unsigned data[sizeof...(args)]; }; template<unsigned... args> const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
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