std::array
이러한 맥락에서 포함된 유형(T)에 기본 생성자가 없으면 std::array를 초기화하는 것이 어려울 수 있습니다. 일반적인 해결 방법은 값을 수동으로 반복하여 배열을 채우는 것입니다. 이는 큰 n 값에 대해 지루하고 오류가 발생하기 쉬운 프로세스입니다.
다행히도 시퀀스 유형과 사용자 정의 반복 기능의 조합을 사용하는 보다 우아한 접근 방식이 있습니다. 다음 코드를 고려해보세요.
<code class="cpp">template<typename T, int N> void f(T value) { // Generate a sequence of numbers: 0, 1, ..., N-1 using genseq_t = genseq_t<N>; std::array<T, N> items = repeat(value, genseq_t{}); }</code>
genseq_t
반복 함수의 구현에는 시퀀스를 풀고 값을 반복하는 작업이 포함됩니다. 간결한 구문을 사용하여 각 요소에 대해:
<code class="cpp">template<typename T, int...N> auto repeat(T value, seq<N...>) -> std::array<T, sizeof...(N)> { // Unpack N, repeating 'value' sizeof...(N) times return {(N, value)...}; }</code>
genseq_t 유형은 시퀀스를 생성하기 위해 push_back 작업을 사용하여 재귀적으로 정의됩니다.
<code class="cpp">template<int N> struct genseq : genseq<N - 1>::type::template push_back<N - 1> {};</code>
사용자 정의 시퀀스 및 반복 기능은 유연한 std::array
위 내용은 기본이 아닌 생성 가능 유형에 대해 `std::array`를 우아하게 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!