winrt::implements 구조체 템플릿(C++/WinRT)
이는 사용자 고유의 C++/WinRT 구현(런타임 클래스 및 활성화 팩터리)이 직접 또는 간접적으로 파생되는 기반입니다. 형식 매개 변수로 지정하는 하나 이상의 Windows 런타임 인터페이스를 구현하고 IUnknown, IInspectable, IAgileObject, IWeakReferenceSource 등의 효율적인 구현도 제공합니다.
참고
이 형식에서 파생하는 방법에 대한 자세한 내용 및 예제는 C++/WinRT를 사용하여 API 작성을 참조하세요.
winrt::implements의 확장 지점
winrt::implements 에는 구현 형식의 소멸을 연기하고, 소멸 중에 안전하게 쿼리하고, 프로젝션된 메서드에 항목을 연결하고 종료할 수 있는 확장 지점이 있습니다. 다음은 확장 지점의 이름과 세부 정보 및 코드 예제에 대한 링크입니다.
- final_release. 소멸 중 지연된 소멸 및 안전한 쿼리를 참조하세요.
- abi_enter, abi_exit 및 abi_guard. 메서드 항목 및 종료 후크를 참조하세요.
표식 형식
구현 구조체 템플릿은 기본 동작을 재정의하는 데 사용되는 여러 표식 형식을 지원합니다. 이러한 값은 거의 사용되지 않을 것으로 예상됩니다. 기본값은 거의 모든 경우에 충분합니다. 표식 형식은 variadic 매개 변수 팩인 인터페이스 목록의 아무 곳에나 나타날 수 있습니다.
다음 표식 형식은 구현에서 지원됩니다.
이 첫 번째 예제는 구현에서 직접 파생할 때 적용 됩니다.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
다음 예제는 런타임 클래스를 작성하는 경우에 대한 것입니다.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
구문
template <typename D, typename... I>
struct implements
템플릿 매개 변수
typename D
파생 형식 이름입니다.
typename... I
구현할 인터페이스 수와 원하는 표식 형식이 있습니다.
기본적으로 IInspectable 에서 파생되는 인터페이스는 IInspectable::GetIids 메서드의 구현에 의해 보고됩니다. 표식 템플릿을cloaked
사용하여 표시하지 않습니다.
예제
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
요구 사항
지원되는 최소 SDK: Windows SDK 버전 10.0.17134.0(Windows 10, 버전 1803)
네임스페이스: winrt
헤더: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h(기본적으로 포함)
멤버 함수
함수 | Description |
---|---|
implements::AddRef 함수 | implements 개체의 기본 인터페이스에 대한 참조 수를 증분합니다. |
implements::find_inspectable 함수 | TBD |
implements::find_interface 함수 | 구현 된 인터페이스에 대 한 포인터는 구현 개체, 지정 된 식별자에 의해 식별; 는 AddRef를 호출하지 않습니다. |
implements::get_local_iids 함수 | implements 개체에 의해 구현되는 인터페이스의 식별자를 포함하는 2개 요소 튜플 을 검색합니다 . |
implements::get_strong 함수 | 구현 개체의 이 포인터에 대한 강력한 참조를 검색합니다. |
implements::get_weak 함수 | 구현 개체의 이 포인터에 대한 약한 참조를 검색합니다. |
implements::QueryInterface 함수 | 지정된 식별자에 의해 식별되는 implements 개체에 의해 구현된 인터페이스에 대한 포인터를 검색합니다. 는 AddRef를 호출합니다. |
implements::Release 함수 | implements 개체의 기본 인터페이스에 대한 참조 수를 감소합니다. |
멤버 연산자
연산자 | Description |
---|---|
implements::operator Windows::Foundation::IInspectable | implements 개체를Windows::Foundation::IInspectable로 변환합니다. |
데이터 멤버
데이터 멤버 | Description |
---|---|
m_inner | 해당하는 경우 구성된 개체에 액세스합니다. 자세한 내용은 런타임 클래스 파생을 참조하세요. |
implements::AddRef 함수
implements 개체의 기본 인터페이스에 대한 참조 수를 증분합니다.
구문
unsigned long __stdcall AddRef() noexcept;
반환 값
새 참조 수입니다. 이 값은 테스트 목적으로만 사용됩니다.
implements::find_inspectable 함수
구현 개체에 의해 구현된 IInspectable 인터페이스에 대한 포인터 를 검색합니다 . 반환되는 포인터에서 AddRef 를 호출하지 않습니다. 이 함수를 사용하면 구현 개체를IInspectable이 필요한 함수에 전달할 수 있습니다.
구문
::IInspectable* find_inspectable() const noexcept override;
반환 값
구현 개체에 의해 구현된 IInspectable 인터페이스에 대한 포인터입니다 .
implements::find_interface 함수
지정된 식별자에 의해 식별되는 구현 개체에 의해 구현된 인터페이스에 대한 포인터를 검색합니다. 반환되는 포인터에서 AddRef 를 호출하지 않습니다.
구문
void* find_interface(winrt::guid const& id) const noexcept override;
반환 값
에서 구현하는 인터페이스에 대한 포인터는 지정된 식별자에 의해 식별되는 개체를 구현 합니다.
implements::get_local_iids 함수
implements 개체에 의해 구현되는 인터페이스의 식별자를 포함하는 2개 요소 튜플 을 검색합니다 . "은폐된" 인터페이스는 포함되지 않습니다.
구문
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
반환 값
구현 개체에 의해 구현되는 인터페이스의 수와 식별자를 포함하는 2개 요소 튜플 입니다 .
implements::get_strong 함수
winrt::implements 개체의 이 포인터에 대한 강력한 참조를 검색합니다. C++/WinRT의 강한 참조 및 약한 참조를 참조하세요. get_strongwinrt::implements 구조체 템플릿의 멤버 함수이므로 C++/WinRT 개체와 같이 winrt::implements에서 직접 또는 간접적으로 파생되는 개체에서만 호출할 수 있습니다. winrt::implements에서 파생하는 방법에 대한 자세한 내용과 예제는 C++/WinRT를 통한 API 작성을 참조하세요.
구문
protected:
winrt::com_ptr<D> get_strong() noexcept;
반환 값
에 대한 강력한 참조는 개체의 이 포인터를 구현합니다.
implements::get_weak 함수
winrt::implements 개체의 이 포인터에 대한 약한 참조를 검색합니다. C++/WinRT의 강한 참조 및 약한 참조를 참조하세요. get_weakwinrt::implements 구조체 템플릿의 멤버 함수이므로 C++/WinRT 개체와 같이 winrt::implements에서 직접 또는 간접적으로 파생되는 개체에서만 호출할 수 있습니다. winrt::implements에서 파생하는 방법에 대한 자세한 내용과 예제는 C++/WinRT를 통한 API 작성을 참조하세요.
구문
protected:
winrt::weak_ref<D> get_weak() noexcept;
반환 값
에 대한 약한 참조를 나타내는 weak_ref 개체는 구현 개체의 이 포인터입니다.
implements::QueryInterface 함수
지정된 식별자에 의해 식별되는 구현 개체에 의해 구현 된 인터페이스에 대한 포인터를 검색합니다. 반환하는 포인터에서 AddRef 를 호출합니다.
구문
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
반환 값
새 참조 수입니다. 이 값은 테스트 목적으로만 사용됩니다.
implements::Release 함수
implements 개체의 기본 인터페이스에 대한 참조 수를 감소합니다.
구문
unsigned long __stdcall Release() noexcept;
반환 값
새 참조 수입니다. 이 값은 테스트 목적으로만 사용됩니다.
implements::operator Windows::Foundation::IInspectable
구현 개체를Windows::Foundation::IInspectable로 변환합니다. 이 연산자를 사용하면 구현 개체를IInspectable이 필요한 함수에 전달할 수 있습니다.
구문
operator winrt::Windows::Foundation::IInspectable() const noexcept;
반환 값
는 Windows::Foundation::IInspectable로 변환된 개체를 구현합니다.