Plantilla de estructura winrt::implements (C++/WinRT)
Esta es la base de la que derivan sus propias implementaciones de C++/WinRT (de clases en tiempo de ejecución y generadores de activación) directa o indirectamente. Implementa una o varias interfaces de Windows Runtime (que se especifican como parámetros de tipo) y también proporciona implementaciones eficaces de IUnknown, IInspectable, IAgileObject, IWeakReferenceSource y otras.
Nota
Para obtener más información sobre cómo derivar de este tipo y ejemplos, consulta Creación de API con C++/WinRT.
Puntos de extensión en winrt::implements
winrt::implements tiene puntos de extensión que permiten aplazar la destrucción de los tipos de implementación, consultar de forma segura durante la destrucción y enlazar la entrada y salir de los métodos proyectados. Estos son los nombres de los puntos de extensión, junto con vínculos a detalles y ejemplos de código.
- final_release. Consulte Consultas seguras y destrucción diferidadurante la destrucción.
- abi_enter, abi_exit y abi_guard. Consulte Entrada de método y enlaces de salida.
Tipos de marcador
La plantilla de estructura implementa admite varios tipos de marcador que se usan para invalidar el comportamiento predeterminado. Esperamos que solo se usen rara vez; los valores predeterminados son suficientes para casi todos los casos. Un tipo de marcador puede aparecer en cualquier parte de la lista de interfaz, que es el paquete de parámetros variádicos.
Los siguientes tipos de marcador son compatibles con implementaciones:
- encubrido<yo>
- composable
- componer
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (para fábricas)
Este primer ejemplo se aplica cuando se deriva directamente de implementaciones.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
Este ejemplo siguiente es para cuando se crea una clase en tiempo de ejecución.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
Sintaxis
template <typename D, typename... I>
struct implements
Parámetros de plantilla
typename D
Nombre del tipo derivado.
typename... I
Cualquier número de interfaces que se van a implementar, además de cualquier tipo de marcador deseado.
De forma predeterminada, las interfaces que derivan de IInspectable se notifican mediante la implementación del método IInspectable::GetIids . Use la plantilla decloaked
marcador para suprimirla.
Ejemplo
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
Requisitos
SDK mínimo admitido: Windows SDK, versión 10.0.17134.0 (Windows 10, versión 1803)
Espacio de nombres: winrt
Encabezado: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluido de forma predeterminada)
Funciones miembro
Función | Descripción |
---|---|
implements::AddRef (función) | Incrementa el recuento de referencias de la interfaz predeterminada del objeto implements . |
implements::find_inspectable función | TBD |
implements::find_interface función | Puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado; no llama a AddRef. |
implements::get_local_iids función | Recupera una tupla de dos elementos que contiene los identificadores de las interfaces implementadas por el objeto implements . |
implements::get_strong función | Recupera una referencia segura al puntero de este objeto de implementación. |
Función winrt::implements::get_weak | Recupera una referencia débil al puntero de este objeto de implementación. |
implements::QueryInterface (Función) | Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado; llama a AddRef. |
implements::Release (Función) | Disminuye el recuento de referencias para la interfaz predeterminada del objeto implements . |
Operadores de miembro
Operador | Descripción |
---|---|
implements::operator Windows::Foundation::IInspectable | Convierte el objeto implements en un objeto Windows::Foundation::IInspectable. |
Miembros de datos
Miembro de datos | Descripción |
---|---|
m_inner | Obtiene acceso al objeto compuesto , si procede. Para obtener más información, consulte Derivación de clases en tiempo de ejecución. |
implements::AddRef (función)
Incrementa el recuento de referencias de la interfaz predeterminada del objeto implements .
Sintaxis
unsigned long __stdcall AddRef() noexcept;
Valor devuelto
Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.
implements::find_inspectable función
Recupera el puntero a la interfaz IInspectable implementada por el objeto implements . No llama a AddRef en el puntero que devuelve. Esta función permite pasar el objeto implements a una función que espera una instancia de IInspectable.
Sintaxis
::IInspectable* find_inspectable() const noexcept override;
Valor devuelto
Puntero a la interfaz IInspectable implementada por el objeto implements .
implements::find_interface función
Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado. No llama a AddRef en el puntero que devuelve.
Sintaxis
void* find_interface(winrt::guid const& id) const noexcept override;
Valor devuelto
Puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado.
implements::get_local_iids función
Recupera una tupla de dos elementos que contiene los identificadores de las interfaces implementadas por el objeto implements . Las interfaces "ocultas" no se incluyen.
Sintaxis
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
Valor devuelto
Una tupla de dos elementos que contiene el número e identificadores de las interfaces implementadas por el objeto implements .
implements::get_strong función
Recupera una referencia segura al puntero winrt::implementsdel objeto . Consulta el artículo Referencias fuertes y débiles de C++/WinRT. Dado que get_strong es una función miembro de la plantilla de estructura winrt::implements , solo se puede llamar desde un objeto que deriva directa o indirectamente de winrt::implements, como un objeto de C++/WinRT. Para más información acerca de cómo derivar desde winrt::implements y ver ejemplos, consulta Crear API con C++/WinRT.
Sintaxis
protected:
winrt::com_ptr<D> get_strong() noexcept;
Valor devuelto
Una referencia segura al puntero de este objeto implementa.
Función winrt::implements::get_weak
Recupera una referencia débil al puntero winrt::implements del objeto . Consulta el artículo Referencias fuertes y débiles de C++/WinRT. Dado que get_weak es una función miembro de la plantilla de estructura winrt::implements , solo se puede llamar desde un objeto que deriva directa o indirectamente de winrt::implements, como un objeto de C++/WinRT. Para más información acerca de cómo derivar desde winrt::implements y ver ejemplos, consulta Crear API con C++/WinRT.
Sintaxis
protected:
winrt::weak_ref<D> get_weak() noexcept;
Valor devuelto
Objeto weak_ref que representa una referencia débil al puntero de este objeto implementa.
implements::QueryInterface (Función)
Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado. Llama a AddRef en el puntero que devuelve.
Sintaxis
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
Valor devuelto
Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.
implements::Release (Función)
Disminuye el recuento de referencias de la interfaz predeterminada del objeto implements .
Sintaxis
unsigned long __stdcall Release() noexcept;
Valor devuelto
Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.
implements::operator Windows::Foundation::IInspectable
Convierte el objeto implements en un objeto Windows::Foundation::IInspectable. Este operador permite pasar el objeto implements a una función que espera una IInspectable.
Sintaxis
operator winrt::Windows::Foundation::IInspectable() const noexcept;
Valor devuelto
El objeto implementa convertido en windows ::Foundation::IInspectable.