C에서 컴파일 시 프로그래밍 방식으로 정적 배열 생성
C에서 컴파일 시 정적 배열을 생성하는 것은 성능과 데이터 무결성을 보장합니다. 정적 배열을 정의하는 한 가지 방법은 다음 구문을 사용하는 것입니다.
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
이 접근 방식은 간단하지만 배열 값을 명시적으로 지정해야 합니다. 더 많은 유연성을 얻으려면 다양한 메타프로그래밍 기술을 사용하여 컴파일 타임에 이러한 값을 "프로그래밍 방식으로" 할당하는 것이 바람직할 수 있습니다.
질문 1: 프로그래밍 방식으로 값 할당
할 수 있나요? 컴파일 타임에 "프로그래밍 방식으로" 배열 값을 할당하기 위해 메타프로그래밍 기술을 사용하시겠습니까?
답변:
예, C 0x 기능을 사용하면 템플릿의 로컬 또는 멤버 배열을 초기화할 수 있습니다. 가변 템플릿 인수 목록에서. 이 접근 방식은 템플릿 인스턴스화 깊이에 의해 제한될 수 있지만 유연성이 크게 향상될 수 있습니다.
질문 2: 선택적 값 할당
배열은 몇 가지를 제외하면 동일합니다. 프로그래밍 방식으로 컴파일 타임에 선택적으로 값을 할당할 수 있습니까?
답변:
예, 조합을 사용할 수 있습니다. 특정 값을 가진 배열을 생성하기 위한 가변 템플릿 및 함수 템플릿. 예를 들어 다음 코드를 생각해 보세요.
template<unsigned... args> struct ArrayHolder { static const unsigned data[sizeof...(args)]; }; template<unsigned... args> const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... }; 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; };
이 코드를 사용하면 각 인덱스의 값을 결정하는 템플릿 함수를 지정하여 특정 값이 포함된 배열을 만들 수 있습니다.
예 :
1부터 5까지의 값을 갖는 크기 5의 배열을 생성하려면:
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const size_t count = 5; typedef generate_array<count, MetaFunc>::result A; for (size_t i=0; i<count; ++i) std::cout << A::data[i] << "\n"; }
위 내용은 C의 정적 배열을 컴파일 타임에 프로그래밍 방식으로 초기화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!