modello di struct winrt::com_ptr (C++/WinRT)
Modello di puntatore intelligente COM con conteggio dei riferimenti. com_ptr rappresenta un puntatore al tipo di implementazione dell'interfaccia o della classe di runtime specificato dal parametro modello. Gestisce automaticamente il conteggio dei riferimenti per la destinazione tramite un puntatore non elaborato privato.
Sintassi
template <typename T>
struct com_ptr
Parametri di modelli
typename T
Tipo di implementazione dell'interfaccia o della classe di runtime, un puntatore a cui è rappresentato dalla com_ptr. Si tratta del tipo della destinazione del puntatore intelligente.
Requisiti
SDK minimo supportato: Windows SDK versione 10.0.17134.0 (Windows 10, versione 1803)
Spazio dei nomi: winrt
Intestazione: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluso per impostazione predefinita)
Alias del tipo di membro
Nome alias | Tipo |
---|---|
com_ptr::type | Sinonimo di una rappresentazione definita dall'implementazione del typename T parametro modello. |
Costruttori
Costruttore | Descrizione |
---|---|
Costruttore com_ptr::com_ptr | Inizializza una nuova istanza dello struct com_ptr , facoltativamente con una copia o uno spostamento dei dati di input. |
Funzioni membro
Funzione | Descrizione |
---|---|
com_ptr::as funzione | Restituisce l'interfaccia richiesta, se supportata. Genera se non è. |
funzione com_ptr::attach | Collega a un puntatore non elaborato che possiede un riferimento alla destinazione; non viene aggiunto un riferimento aggiuntivo. |
funzione com_ptr::capture | Chiama una funzione o un metodo specificato (chiamando automaticamente winrt::check_hresult su di esso) e acquisisce il puntatore dell'interfaccia che viene restituito dalla funzione o dal metodo come void** . |
funzione com_ptr::copy_from | Copia da un altro puntatore. Decrementa il conteggio dei riferimenti su qualsiasi interfaccia o oggetto a cui si fa riferimento, copia il parametro del puntatore non elaborato e inizia a gestire la durata dell'interfaccia o dell'oggetto a cui punta. |
funzione com_ptr::copy_to | Copia in un altro puntatore dall'oggetto com_ptr . Incrementa il conteggio dei riferimenti su qualsiasi interfaccia o oggetto a cui si fa riferimento e copia l'indirizzo di memoria dell'interfaccia o dell'oggetto nel parametro. |
funzione com_ptr::d etach | Scollega dall'interfaccia o dall'oggetto a cui si fa riferimento senza decrementare il conteggio dei riferimenti, forse per restituirlo a un chiamante. |
funzione com_ptr::get | Restituisce il puntatore non elaborato sottostante deve essere passato a una funzione. |
funzione com_ptr::p ut | Restituisce l'indirizzo del puntatore non elaborato sottostante; questa funzione consente di chiamare metodi (ad esempio metodi COM) che restituiscono riferimenti come parametri out tramite un puntatore a un puntatore a un puntatore. |
funzione com_ptr::p ut_void | Restituisce l'indirizzo del puntatore non elaborato sottostante come puntatore a un puntatore a vuoto; questa funzione consente di chiamare metodi (ad esempio metodi COM) che restituiscono riferimenti come parametri out tramite un puntatore a un puntatore a un puntatore a void. |
funzione com_ptr::try_as | Restituisce l'interfaccia richiesta, se supportata. Restituisce nullptr , o false , se non è. |
funzione com_ptr::try_capture | Versione di com_ptr::capture che non genera un errore, ma restituisce true invece se ha esito positivo o false meno. |
Operatori membri
Operatore | Descrizione |
---|---|
com_ptr::operator bool | Verifica se il puntatore intelligente fa riferimento a un'interfaccia o a un oggetto. |
com_ptr::operator* (operatore indiretto) | Restituisce un riferimento alla destinazione dell'com_ptr in modo che sia possibile passarla a una funzione che prevede un riferimento al tipo di destinazione T. |
com_ptr::operator= (operatore di assegnazione) | Assegna un valore all'oggetto com_ptr . |
com_ptr::operator-> (operatore freccia) | Per concedere l'accesso ai metodi dell'interfaccia o dell'oggetto a cui si fa riferimento, restituisce il puntatore non elaborato sottostante. |
Funzioni gratuite
Funzione | Descrizione |
---|---|
Funzione attach_abi | Collega un oggetto com_ptr a un puntatore non elaborato proprietario di un riferimento alla destinazione; non viene aggiunto un riferimento aggiuntivo. |
Funzione detach_abi | Scollega un oggetto com_ptr dall'interfaccia non elaborata senza decrementare il conteggio dei riferimenti, forse per restituirlo a un chiamante. |
Funzione swap | Scambia il contenuto dei due parametri com_ptr in modo che puntino tra loro alla destinazione. |
Operatori gratuiti
Funzione | Descrizione |
---|---|
operator!= (operatore di disuguaglianza) | Restituisce un valore che indica se i due parametri fanno riferimento a destinazioni diverse. |
operatore (operatore< minore di) | Restituisce un valore che indica se la destinazione del primo parametro si verifica in precedenza in memoria rispetto a quella del secondo parametro. |
operator<= (operatore minore o uguale a) | Restituisce un valore che indica se la destinazione del primo parametro si verifica in precedenza in memoria o nella stessa posizione del secondo parametro. |
operator== (operatore di uguaglianza) | Restituisce un valore che indica se i due parametri fanno riferimento alla stessa interfaccia e/o oggetto. |
operatore (operatore> maggiore di) | Restituisce un valore che indica se la destinazione del primo parametro si verifica successivamente in memoria rispetto a quella del secondo parametro. |
operator>= (operatore maggiore o uguale a) | Restituisce un valore che indica se la destinazione del primo parametro si verifica in un secondo momento in memoria o nella stessa posizione del secondo parametro. |
Costruttore com_ptr::com_ptr
Inizializza una nuova istanza dello struct com_ptr , facoltativamente con una copia o uno spostamento dei dati di input.
Il void*
costruttore accetta un T*e presuppone la proprietà. winrt::take_ownership_from_abi_t è un tipo di marcatore che rende esplicita la responsabilità di rilasciare questo puntatore viene ora trasferito al com_ptr. Il refcount non deve essere esattamente 1; sta solo dicendo che la responsabilità è stata trasferita.
Sintassi
com_ptr(winrt::com_ptr const& other) noexcept;
com_ptr(std::nullptr_t = nullptr) noexcept;
com_ptr(void* ptr, winrt::take_ownership_from_abi_t) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U> const& other) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U>&& other) noexcept;
Parametri di modelli
typename U
Tipo di destinazione a cui punta il puntatore intelligente di input.
Parametri
other
Un altro com_ptr che inizializza l'oggetto com_ptr . Il parametro T deve essere convertibile nel T dell'oggetto com_ptr.
com_ptr::as funzione
Restituisce l'interfaccia richiesta, se supportata. Genera se non è. Questa funzione è utile se si vuole eseguire una query per un'interfaccia che non è necessario tornare al chiamante.
Per esempi di codice, vedere la sezione Creazione di istanze e restituzione di tipi e interfacce proiettati e altre sezioni di tale argomento.
Sintassi
template <typename To> auto as() const;
template <typename To> void as(To& to) const;
Parametri di modelli
typename To
Tipo dell'interfaccia richiesta.
Parametri
to
Riferimento a un valore per ricevere l'interfaccia richiesta.
Valore restituito
Un com_ptr che fa riferimento all'interfaccia richiesta o a un puntatore intelligente fortemente tipizzato per l'interfaccia richiesta (dichiarata da C++/WinRT o da terze parti).
funzione com_ptr::attach
Collega a un puntatore non elaborato che possiede un riferimento alla destinazione; non viene aggiunto un riferimento aggiuntivo. Se necessario, è possibile usare questa funzione per unire i riferimenti.
Sintassi
void attach(T* value) noexcept;
Parametri
value
Puntatore non elaborato proprietario di un riferimento alla destinazione.
funzione com_ptr::capture
Chiama una funzione o un metodo specificato (chiamando automaticamente winrt::check_hresult su di esso) e acquisisce il puntatore dell'interfaccia che viene restituito dalla funzione o dal metodo come void**
.
Vedere anche il modello di funzione winrt::capture.
Sintassi
template <typename F, typename...Args>
void capture(F function, Args&&...args);
template <typename O, typename M, typename...Args>
void capture(O* p, M method, Args&& ...args);
template <typename O, typename M, typename...Args>
void capture(winrt::com_ptr<O> const& object, M method, Args&&...args);
Parametri di modelli
typename F
Tipo di oggetto funzione, ad esempio una funzione gratuita o std::function.
typename O
Tipo di interfaccia.
typename M
Tipo di metodo.
typename Args
Zero o più tipi di argomento.
Parametri
function
Oggetto funzione di tipo F
.
p
Puntatore a un oggetto di tipo O
.
object
Oggetto winrt::com_ptr di tipo O
.
method
Metodo (implementato da O
) di tipo M
.
args
Zero o più argomenti di tipo Args
.
Commenti
- L'overload
capture(F function, Args&&...args)
richiama l'oggetto funzione. - L'overload
capture(O* p, M method, Args&& ...args)
richiama il metodo sul puntatore. - L'overload
capture(winrt::com_ptr<O> const& object, M method, Args&&...args)
richiama il metodo nell'oggetto .
Tutti gli overload passano (per l'oggetto invoke) tutti gli argomenti aggiuntivi forniti. Tutti gli overload passano anche i due argomenti aggiuntivi che tali richiami richiedono, in particolare un REFIID (l'ID della destinazione dell'oggetto winrt::com_ptr) e un void** (indirizzo di un puntatore alla destinazione di winrt::com_ptr).
Esempio
winrt::com_ptr<IDXGIAdapter> adapter
...
winrt::com_ptr<IDXGIFactory2> factory;
factory.capture(adapter, &IDXGIAdapter::GetParent);
funzione com_ptr::copy_from
Copia da un altro puntatore. Decrementa il conteggio dei riferimenti su qualsiasi interfaccia o oggetto a cui si fa riferimento, copia il parametro del puntatore non elaborato e inizia a gestire la durata dell'interfaccia o dell'oggetto a cui punta.
Sintassi
void copy_from(T* other) noexcept;
Parametri
other
Puntatore non elaborato a una destinazione la cui durata deve essere gestita dall'oggetto com_ptr .
funzione com_ptr::copy_to
Copia in un altro puntatore dall'oggetto com_ptr . Incrementa il conteggio dei riferimenti su qualsiasi interfaccia o oggetto a cui si fa riferimento e copia l'indirizzo di memoria dell'interfaccia o dell'oggetto nel parametro. Questa funzione consente di distribuire un riferimento alla stessa interfaccia senza chiamare QueryInterface.
Sintassi
void copy_to(T** other) const noexcept;
Parametri
other
Indirizzo di un puntatore non elaborato; in cui copiare il puntatore nella destinazione dell'oggetto com_ptr .
funzione com_ptr::d etach
Scollega dall'interfaccia o dall'oggetto a cui si fa riferimento senza decrementare il conteggio dei riferimenti, forse per restituirlo a un chiamante.
Sintassi
T* detach() noexcept;
Valore restituito
Puntatore all'interfaccia o all'oggetto a cui fa riferimento l'oggetto com_ptr .
funzione com_ptr::get
Restituisce il puntatore non elaborato sottostante deve essere passato a una funzione. È possibile chiamare AddRef, Release o QueryInterface nel puntatore restituito.
Sintassi
T* get() const noexcept;
Valore restituito
Puntatore all'interfaccia o all'oggetto a cui fa riferimento l'oggetto com_ptr .
funzione com_ptr::p ut
Restituisce l'indirizzo del puntatore non elaborato sottostante; questa funzione consente di chiamare metodi (ad esempio metodi COM) che restituiscono riferimenti come parametri out tramite un puntatore a un puntatore a un puntatore. Se l'oggetto com_ptr ha già una destinazione, assegnare nullptr
all'oggetto com_ptr prima di chiamare questa funzione, altrimenti la funzione si asserisce.
Sintassi
T** put() noexcept;
Valore restituito
Indirizzo del puntatore non elaborato sottostante.
funzione com_ptr::p ut_void
Restituisce l'indirizzo del puntatore non elaborato sottostante come puntatore a un puntatore a vuoto; questa funzione consente di chiamare metodi (ad esempio metodi COM) che restituiscono riferimenti come parametri out tramite un puntatore a un puntatore a un puntatore a void. Se l'oggetto com_ptr ha già una destinazione, assegnare nullptr
all'oggetto com_ptr prima di chiamare questa funzione, altrimenti la funzione si asserisce.
Sintassi
void** put_void() noexcept;
Valore restituito
Indirizzo del puntatore non elaborato sottostante come puntatore a un puntatore a un puntatore a void.
funzione com_ptr::try_as
Restituisce l'interfaccia richiesta, se supportata. Restituisce nullptr
(overload auto
restituito) o false
(overload bool
restituito), se non è. Questa funzione è utile se si vuole eseguire una query per un'interfaccia che non è necessario tornare al chiamante.
Sintassi
template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;
Parametri di modelli
typename To
Tipo dell'interfaccia richiesta.
Parametri
to
Riferimento a un valore per ricevere l'interfaccia richiesta.
Valore restituito
Un com_ptr che fa riferimento all'interfaccia richiesta o a un puntatore intelligente fortemente tipizzato per l'interfaccia richiesta (dichiarata da C++/WinRT o da terze parti), se l'interfaccia richiesta è supportata, in caso contrario nullptr
(overload -restituito) o false
(auto
overload bool
restituito).
funzione com_ptr::try_capture
Versione di com_ptr::capture che non genera un errore, ma restituisce true
invece se ha esito positivo o false
meno.
Vedere anche il modello di funzione winrt::try_capture.
com_ptr::operator bool
Verifica se il puntatore intelligente fa riferimento a un'interfaccia o a un oggetto. Se il puntatore intelligente non fa riferimento a un'interfaccia o a un oggetto, è logicamente Null; altrimenti non è logicamente null.
Sintassi
explicit operator bool() const noexcept;
Valore restituito
true
se il puntatore intelligente fa riferimento a un'interfaccia o a un oggetto (logicamente non null), altrimenti false
(logicamente null).
com_ptr::operator* (operatore indiretto)
Restituisce un riferimento alla destinazione dell'com_ptr in modo che sia possibile passarla a una funzione che prevede un riferimento al tipo di destinazione T.
Sintassi
T& operator*() const noexcept;
Valore restituito
Riferimento alla destinazione del com_ptr.
com_ptr::operator= (operatore di assegnazione)
Assegna un valore all'oggetto com_ptr .
Sintassi
winrt::com_ptr& operator=(winrt::com_ptr const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U> const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U>&& other) noexcept;
Parametri di modelli
typename U
Tipo a cui punta il valore assegnato.
Parametri
other
Valore com_ptr da assegnare all'oggetto com_ptr . Il valore T del parametro deve essere convertibile nel Tdell'oggetto com_ptr.
Valore restituito
Riferimento all'oggetto com_ptr .
com_ptr::operator-> (operatore arrow)
Per concedere l'accesso ai metodi dell'interfaccia o dell'oggetto a cui si fa riferimento, restituisce il puntatore non elaborato sottostante. Non è possibile chiamare AddRef né Release sul puntatore restituito, ma è possibile chiamare QueryInterface.
Sintassi
auto operator->() const noexcept;
Valore restituito
Puntatore all'interfaccia o all'oggetto a cui fa riferimento l'oggetto com_ptr .
Funzione attach_abi
Collega un oggetto com_ptr a un puntatore non elaborato proprietario di un riferimento alla destinazione; non viene aggiunto un riferimento aggiuntivo. Se necessario, è possibile usare questa funzione per unire i riferimenti.
Sintassi
void attach_abi(winrt::com_ptr<T>& object, T* value) noexcept;
Parametri
object
Oggetto com_ptr su cui operare.
value
Puntatore non elaborato proprietario di un riferimento alla destinazione.
Funzione detach_abi
Scollega un oggetto com_ptr dalla relativa interfaccia non elaborata senza decrementare il conteggio dei riferimenti, ad esempio per restituirlo a un chiamante.
Sintassi
auto detach_abi(winrt::com_ptr<T>& object) noexcept;
Parametri
object
Oggetto com_ptr su cui operare.
Valore restituito
Puntatore all'interfaccia non elaborata a cui fa riferimento l'oggetto com_ptr .
operator!= (operatore di disuguaglianza)
Restituisce un valore che indica se i due parametri fanno riferimento a destinazioni diverse.
Sintassi
template <typename T> bool operator!=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
template <typename T> bool operator!=(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator!=(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se i due parametri puntano a destinazioni diverse; in caso contrario false
, .
operator (operatore< less-than)
Restituisce un valore che indica se la destinazione del primo parametro si verifica in precedenza in memoria rispetto a quella del secondo parametro.
Sintassi
template <typename T> bool operator<(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se l'indirizzo di memoria del primo parametro di destinazione è minore di quello del secondo parametro; in caso contrario false
, .
operator<= (operatore minore o uguale a)
Restituisce un valore che indica se la destinazione del primo parametro si verifica in precedenza nella memoria o nella stessa posizione del secondo parametro.
Sintassi
template <typename T> bool operator<=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se l'indirizzo di memoria della destinazione del primo parametro è minore o uguale a quello del secondo parametro; in caso contrario false
, .
operator== (operatore di uguaglianza)
Restituisce un valore che indica se i due parametri fanno riferimento alla stessa interfaccia e/o oggetto.
Sintassi
template <typename T> bool operator==(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator==(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se i due parametri puntano alla stessa destinazione, in caso contrario false
.
operatore (operatore> maggiore di)
Restituisce un valore che indica se la destinazione del primo parametro viene eseguita in un secondo momento in memoria rispetto a quella del secondo parametro.
Sintassi
template <typename T> bool operator>(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se l'indirizzo di memoria della destinazione del primo parametro è maggiore di quello del secondo parametro; in caso contrario false
, .
operator>= (operatore maggiore o uguale a)
Restituisce un valore che indica se la destinazione del primo parametro viene eseguita in un secondo momento in memoria o nella stessa posizione del secondo parametro.
Sintassi
template <typename T> bool operator>=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parametri
left
right
Valore com_ptr l'indirizzo di memoria della destinazione da confrontare con quello dell'altro parametro.
Valore restituito
true
se l'indirizzo di memoria della destinazione del primo parametro è maggiore o uguale a quello del secondo parametro; in caso contrario false
, .
Funzione swap
Scambia il contenuto dei due parametri com_ptr in modo che puntino l'uno alla destinazione dell'altra.
Sintassi
void swap(winrt::com_ptr& left, winrt::com_ptr& right) noexcept;
Parametri
left
right
Valore com_ptr il cui puntatore a scambiarsi a vicenda con quello dell'altro parametro.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per