winrt::com_array 구조체 템플릿(C++/WinRT)

기본 버퍼가 COM 작업 할당자를 통해 할당되고 해제되는 데이터의 C 스타일 준수 배열을 나타냅니다. 따라서 이름입니다. 일반적으로 한 구성 요소에 의해 할당되고 다른 구성 요소에서 해제되는 C 스타일 규칙 배열을 나타내는 데 사용됩니다.

winrt::com_array Windows 런타임 API와 매개 변수를 전달하는 데 사용됩니다. API를 작성하는 경우 호출자에게 프로젝션된 배열을 반환하려면 winrt::com_array 생성해야 합니다. 반환 값으로 또는 출력 매개 변수를 통해

winrt::com_arraywinrt::array_view 파생됩니다. winrt::array_view 구조체 템플릿 항목을 참조하세요. 이 항목은 winrt::com_array 사용할 수 있는 멤버 및 자유 연산자를 문서화합니다. 그러나 기본 형식 winrt::array_view (연속된 일련의 값에 대한 비 소유 보기 또는 범위) 및 winrt::com_array (자체 요소를 할당하고 해제함) 간의 의미 체계 차이에 유의해야 합니다.

구문

template <typename T>
struct com_array : winrt::array_view<T>

템플릿 매개 변수

typename Tcom_array 포함하는 값(요소)의 형식입니다.

요구 사항

지원되는 최소 SDK: Windows SDK 버전 10.0.17134.0(Windows 10, 버전 1803)

네임스페이스: winrt

헤더: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h(기본적으로 포함)

생성자

생성자 Description
com_array::com_array 생성자 입력 데이터의 복사본을 사용하거나 데이터가 제공되지 않은 경우의 기본값을 사용하여 com_array 구조체의 T 새 인스턴스를 초기화합니다.

멤버 함수

기능 설명
com_array::clear 함수 com_array 개체를 비워 줍니다.

멤버 연산자

연산자 설명
com_array::operator=(대입 연산자) com_array 개체에 값을 할당합니다.

무료 함수

기능 설명
detach_abi 함수 com_array 개체를 원시 값에서 분리하여 호출자에게 반환할 수 있습니다. com_array 지워집니다. winrt::d etach_abi 함수도 참조하세요.
put_abi 함수 다른 값으로 설정할 수 있도록 com_array 주소를 검색합니다. winrt::p ut_abi 함수도 참조하세요.
swap 함수 com_array 매개 변수의 내용을 바꿉니다.

com_array::com_array 생성자

입력 데이터의 복사본을 사용하거나 데이터가 제공되지 않은 경우의 기본값을 사용하여 com_array 구조체의 T 새 인스턴스를 초기화합니다.

구문

생성자는 번호가 매겨지고 아래 설명에 자세히 설명 되어 있습니다 .

1.  com_array() noexcept;
2.  com_array(uint32_t const count);
3.  com_array(uint32_t const count, T const& value);
4.  template <typename InIt> com_array(InIt first, InIt last);
5.  com_array(std::vector<T> const& vectorValue);
6.  template <size_t N> com_array(std::array<T, N> const& arrayValue);
7.  template <uint32_t N> com_array(T const(&rawArrayValue)[N])
8.  com_array(std::initializer_list<T> initializerListValue);
9.  com_array(void* ptr, uint32_t const count, winrt::take_ownership_from_abi_t) noexcept;
10. com_array(com_array&& comArrayValue) noexcept;

템플릿 매개 변수

typename InIt 입력 데이터를 제공하는 입력 반복기입니다.

size_t Nuint32_t N 입력 데이터의 값(요소)입니다.

매개 변수

arrayValuecom_array 개체를 초기화하는 std::array 값입니다.

comArrayValuecom_array 개체를 초기화하는 또 다른 com_array. 생성자가 반환되면 comArrayValue 가 비어 있습니다.

countcom_array 개체의 요소 수입니다.

firstlast 입력 반복기 쌍입니다. 범위의 값(첫 번째, 마지막)은 com_array 개체를 초기화하는 데 사용됩니다.

initializerListValuecom_array 개체를 초기화하는 이니셜라이저 목록 값입니다.

ptrCoTaskMemAlloc를 사용하여 할당한 N 값 블록에 대한 포인터입니다. com_array 개체는 이 메모리의 소유권을 맡습니다.

rawArrayValuecom_array 개체를 초기화하는 C 스타일 배열입니다.

valuecom_array 개체의 각 요소에 제공할 값입니다.

vectorValuecom_array 개체를 초기화하는 std::vector 값입니다.

설명

생성자는 위의 구문 으로 번호가 매겨집니다.

1. 기본 생성자

빈 버퍼를 생성합니다.

2. 용량 생성자; 기본값

기본 생성 T의 복사본인 count 요소의 버퍼를 만듭니다.

이는 각각 기본 생성 Tcount 요소의 버퍼를 만드는 것과 유사하지만 동일하지는 않습니다.

auto players{ winrt::com_array<MediaPlayer>(50) };

MediaPlayer 개체의 기본 생성자는 새 미디어 플레이어 개체에 대한 참조를 만들고 복사 생성자는 참조를 복사합니다. 따라서 위의 코드 줄은 동일한 미디어 플레이어 개체에 대한 50개의 참조 배열을 만듭니다. 50개의 다른 미디어 플레이어 개체 배열을 만들지 않습니다.

3. 용량 생성자; 명시적 값

각각 제공된 의 복사본인 count 요소의 버퍼를 만듭니다.

winrt::com_array(2, 42) 는 범위 생성자(4)를 사용하려는 시도로 해석됩니다. 그러나 2와 42는 반복기가 아니므로 실패합니다. 명시적 int32_t 값을 가진 용량 생성자로 해석되도록 하려면 명시적으로 부호 없는 정수를 첫 번째 매개 변수 com_array(2u, 42)로 사용합니다.

4. 범위 생성자

범위의 복사본인 버퍼를 만듭니다(첫 번째, 마지막).

다음과 같이 기본 형식 T 를 명시적으로 지정합니다.

auto a{ winrt::com_array<T>(source.begin(), source.end()) };

범위를 복사하는 대신 이동하려면 std::move_iterator 반복기 어댑터를 사용합니다.

auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
                            std::move_iterator(source.end())) };

5. 벡터 생성자

vectorValue의 콘텐츠 복사본인 버퍼를 만듭니다.

6. 배열 생성자

arrayValue의 콘텐츠 복사본인 버퍼를 만듭니다.

7. C 스타일 배열 생성자

C 스타일 배열 rawArrayValue의 내용 복사본인 버퍼를 만듭니다.

8. Initializer-list 생성자

이니셜라이저 목록 initializerListValue의 콘텐츠 복사본인 버퍼를 만듭니다.

9. ABI 생성자

지정된 길이의 버퍼 소유권을 가져옵니다.

생성자의 가장 낮은 수준입니다. CoTaskMemAlloc를 통해 이미 할당된 메모리 블록이 있고 com_array 책임을 맡기려는 경우 사용합니다. 이 생성자에 대한 특수 요구 사항을 강조하려면 최종 인수는 winrt::take_ownership_from_abi이어야 합니다.

10. 생성자 이동

동일한 형식의 다른 com_array 리소스를 이동하여 원래 리소스를 비워 둡니다.

생성자 5, 6 및 7

복사본은 제공된 컨테이너의 내용을 가져옵니다. std::move_iterator 반복기 어댑터와 함께 범위 생성자(4)를 사용하여 콘텐츠를 복사하는 대신 com_array 이동할 수 있습니다.

com_array::clear 함수

com_array 개체를 비워 줍니다.

구문

void clear() noexcept;

detach_abi 함수

com_array 개체를 원시 값에서 분리하여 호출자에게 반환할 수 있습니다. com_array 지워집니다. winrt::d etach_abi 함수도 참조하세요.

구문

auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;

매개 변수

object 작동할 com_array 개체입니다.

반환 값

요소 개수와 com_array 걸쳐 있는 연속된 값 계열을 포함하는 2개 요소 튜플입니다.

com_array::operator=(대입 연산자)

com_array 개체에 값을 할당합니다.

구문

com_array& operator=(winrt::com_array&& comArrayValue) noexcept;

매개 변수

comArrayValuecom_array 개체에 할당할 com_array 값입니다.

반환 값

com_array 개체에 대한 참조입니다.

put_abi 함수

다른 값으로 설정할 수 있도록 com_array 주소를 검색합니다. winrt::p ut_abi 함수도 참조하세요.

구문

template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;

매개 변수

object 작동할 com_array 개체입니다.

반환 값

다른 값으로 설정할 준비가 된 com_array 주소입니다.

swap 함수

com_array 매개 변수의 내용을 바꿉니다.

구문

friend void swap(winrt::com_array& left, winrt::com_array& right) noexcept;

매개 변수

leftright 다른 매개 변수와 상호 교환할 내용이 있는 com_array 값입니다.

예제

using namespace winrt;
...
    com_array<byte> left{ 1,2,3 };
    com_array<byte> right{ 4,5,6 };
    swap(left, right);

참고 항목