Шаблон структуры winrt::implements (C++/WinRT)
Это база, из которой прямо или косвенно наследуются собственные реализации C++/WinRT (классов среды выполнения и фабрик активации). Он реализует один или несколько интерфейсов среда выполнения Windows (которые указываются в качестве параметров типа), а также предоставляет эффективные реализации IUnknown, IInspectable, IAgileObject, IWeakReferenceSource и других.
Примечание
Дополнительные сведения о производной от этого типа и примеры см. в статье Создание API с помощью C++/WinRT.
Точки расширения в winrt::implements
winrt::implements имеет точки расширения, которые позволяют отложить уничтожение типов реализации, безопасно выполнять запросы во время уничтожения и перехватывать вход в проецируемые методы и выход из него. Ниже приведены имена точек расширения, а также ссылки на подробные сведения и примеры кода.
- final_release. См . разделы Отложенное уничтожение и Безопасные запросы во время уничтожения.
- abi_enter, abi_exit и abi_guard. См . раздел Перехватчики входа и выхода из метода.
Типы маркеров
Шаблон реализует структуру поддерживает несколько типов маркеров , которые используются для переопределения поведения по умолчанию. Мы ожидаем, что они будут использоваться лишь в редких случаях; значений по умолчанию достаточно почти для всех случаев. Тип маркера может отображаться в любом месте списка интерфейсов, который является вариадическим пакетом параметров.
Реализации поддерживают следующие типы маркеров:
- плащ я<>
- составление
- создание
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (для фабрик)
Этот первый пример применяется, если вы наследуете непосредственно от реализаций.
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.