Шаблон структуры winrt::implements (C++/WinRT)

Это база, из которой прямо или косвенно наследуются собственные реализации C++/WinRT (классов среды выполнения и фабрик активации). Он реализует один или несколько интерфейсов среда выполнения Windows (которые указываются в качестве параметров типа), а также предоставляет эффективные реализации IUnknown, IInspectable, IAgileObject, IWeakReferenceSource и других.

Примечание

Дополнительные сведения о производной от этого типа и примеры см. в статье Создание API с помощью C++/WinRT.

Точки расширения в winrt::implements

winrt::implements имеет точки расширения, которые позволяют отложить уничтожение типов реализации, безопасно выполнять запросы во время уничтожения и перехватывать вход в проецируемые методы и выход из него. Ниже приведены имена точек расширения, а также ссылки на подробные сведения и примеры кода.

Типы маркеров

Шаблон реализует структуру поддерживает несколько типов маркеров , которые используются для переопределения поведения по умолчанию. Мы ожидаем, что они будут использоваться лишь в редких случаях; значений по умолчанию достаточно почти для всех случаев. Тип маркера может отображаться в любом месте списка интерфейсов, который является вариадическим пакетом параметров.

Реализации поддерживают следующие типы маркеров:

Этот первый пример применяется, если вы наследуете непосредственно от реализаций.

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 (включен по умолчанию)

Функции элементов

Функция Описание
Функция implements::AddRef Увеличивает число ссылок для интерфейса по умолчанию реализующего объекта .
Функция implements::find_inspectable TBD
Функция implements::find_interface Указатель на интерфейс, реализованный объектом implements , идентифицируемый указанным идентификатором; не вызывает AddRef.
Функция implements::get_local_iids Извлекает двухэлементный кортеж, содержащий идентификаторы интерфейсов, реализованных объектом implements .
Функция implements::get_strong Извлекает строговую ссылку на указатель этого объекта .
Функция implements::get_weak Извлекает слабую ссылку на этот указатель объекта .
Функция implements::QueryInterface Извлекает указатель на интерфейс, реализованный объектом implements , идентифицируемый указанным идентификатором; вызывает AddRef.
Функция implements::Release Уменьшает количество ссылок для интерфейса по умолчанию реализуемого объекта .

Операторы-члены

Оператор Описание
implements::operator Windows::Foundation::IInspectable Преобразует объект implements в Windows::Foundation::IInspectable.

Элементы данных

Элемент данных Описание
m_inner Обращается к составляемому объекту , если это применимо. Дополнительные сведения см. в разделе Наследование класса среды выполнения.

Функция implements::AddRef

Увеличивает число ссылок для интерфейса по умолчанию реализующего объекта .

Синтаксис

unsigned long __stdcall AddRef() noexcept;

Возвращаемое значение

Новое число ссылок. Это значение предназначено для использования только в целях тестирования.

Функция implements::find_inspectable

Извлекает указатель на интерфейс IInspectable , реализованный объектом implements . Не вызывает Метод AddRef для возвращаемого указателя. Эта функция позволяет передать объект реализации в функцию, которая ожидает IInspectable.

Синтаксис

::IInspectable* find_inspectable() const noexcept override;

Возвращаемое значение

Указатель на интерфейс IInspectable , реализованный объектом implements .

Функция implements::find_interface

Извлекает указатель на интерфейс, реализованный объектом implements , идентифицируемым указанным идентификатором. Не вызывает Метод AddRef для возвращаемого указателя.

Синтаксис

void* find_interface(winrt::guid const& id) const noexcept override;

Возвращаемое значение

Указатель на интерфейс, реализованный объектом implements , идентифицируемый указанным идентификатором.

Функция implements::get_local_iids

Извлекает двухэлементный кортеж, содержащий идентификаторы интерфейсов, реализованных объектом implements . Интерфейсы Cloaked не включены.

Синтаксис

std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;

Возвращаемое значение

Двухэлементный кортеж, содержащий число и идентификаторы интерфейсов, реализованных объектом implements .

Функция implements::get_strong

Извлекает строгую ссылку на указатель this объекта winrt::implements. См. статью Сильные и слабые ссылки в C++/WinRT. Поскольку get_strong является функцией-членом шаблона структуры winrt::implements , ее можно вызывать только из объекта, который прямо или косвенно является производным от winrt::implements, например из объекта C++/WinRT. Дополнительные сведения о производных от winrt::implements и примерах см. в статье Author APIs with C++/WinRT (Создание API-интерфейсов с помощью C++/WinRT).

Синтаксис

protected:
    winrt::com_ptr<D> get_strong() noexcept;

Возвращаемое значение

Строгой ссылкой на этот указательреализует объект .

implements::get_weak function

Извлекает слабую ссылку на указатель this объекта winrt::implements. См. статью Сильные и слабые ссылки в C++/WinRT. Так как get_weak является функцией-членом шаблона структуры winrt::implements , ее можно вызывать только из объекта, который прямо или косвенно является производным от winrt::implements, например из объекта C++/WinRT. Дополнительные сведения о производных от winrt::implements и примерах см. в статье Author APIs with C++/WinRT (Создание API-интерфейсов с помощью C++/WinRT).

Синтаксис

protected:
    winrt::weak_ref<D> get_weak() noexcept;

Возвращаемое значение

Объект weak_ref, представляющий слабую ссылку на этотуказатель объекта .

Функция implements::QueryInterface

Извлекает указатель на интерфейс, реализованный объектом implements , идентифицируемым указанным идентификатором. Вызывает Метод AddRef для возвращаемого указателя.

Синтаксис

HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;

Возвращаемое значение

Новое число ссылок. Это значение предназначено для использования только в целях тестирования.

Функция implements::Release

Уменьшает количество ссылок для интерфейса по умолчанию реализуемого объекта .

Синтаксис

unsigned long __stdcall Release() noexcept;

Возвращаемое значение

Новое число ссылок. Это значение предназначено для использования только в целях тестирования.

implements::operator Windows::Foundation::IInspectable

Преобразует объект implements в Windows::Foundation::IInspectable. Этот оператор позволяет передать объект implements в функцию, которая ожидает IInspectable.

Синтаксис

operator winrt::Windows::Foundation::IInspectable() const noexcept;

Возвращаемое значение

Реализует объект , преобразованный в Windows::Foundation::IInspectable.

См. также раздел