winrt::implements 構造体テンプレート (C++/WinRT)
これは、(ランタイム クラスとアクティブ化ファクトリの) 独自の C++/WinRT 実装が直接または間接的に派生するベースです。 1 つ以上のWindows ランタイム インターフェイス (型パラメーターとして指定) を実装し、IUnknown、IInspectable、IAgileObject、IWeakReferenceSource などの効率的な実装も提供します。
注意
この型からの派生の詳細と例については、「 C++/WinRT を使用した API の作成」を参照してください。
winrt::implements の拡張ポイント
winrt::implements には拡張ポイントがあります。これにより、実装型の破棄を延期したり、破棄中に安全にクエリを実行したり、エントリを投影されたメソッドにフックして終了したりできます。 拡張ポイントの名前と、詳細とコード例へのリンクを次に示します。
- final_release。 「 遅延破棄」 と「 破棄中の安全なクエリ」を参照してください。
- abi_enter、 abi_exit、 およびabi_guard。 「 メソッドの開始フックと終了フック」を参照してください。
マーカーの種類
実装構造体テンプレートでは、既定の動作をオーバーライドするために使用されるいくつかのマーカー型がサポートされています。 これらはまれにしか使用されないと予想されます。ほとんどの場合、既定値で十分です。 マーカーの種類は、可変個引数パラメーター パックであるインターフェイス リスト内の任意の場所に表示できます。
実装 では、次のマーカーの種類がサポートされています。
この最初の例は、実装から直接派生する場合 に適用されます。
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 オブジェクトの既定のインターフェイスの参照カウントをインクリメントします。 |
implements::find_inspectable 関数 | TBD |
implements::find_interface 関数 | implements オブジェクトによって実装されるインターフェイスへのポインター。指定された識別子によって識別されます。は AddRef を呼び出しません。 |
implements::get_local_iids 関数 | implements オブジェクトによって実装されるインターフェイスの識別子を含む 2 要素タプルを取得します。 |
implements::get_strong 関数 | implements オブジェクトのこのポインターへの厳密な参照を取得します。 |
implements::get_weak 関数 | implements オブジェクトのこのポインターへの弱い参照を取得します。 |
implements::QueryInterface 関数 | implements オブジェクトによって実装されるインターフェイスへのポインターを取得します。これは、指定された識別子によって識別されます。は AddRef を呼び出します。 |
implements::Release 関数 | implements オブジェクトの既定のインターフェイスの参照カウントをデクリメントします。 |
メンバー演算子
演算子 | 説明 |
---|---|
implements::operator Windows::Foundation::IInspectable | implements オブジェクトを Windows::Foundation::IInspectable に変換します。 |
データ メンバー
データ メンバー | 説明 |
---|---|
m_inner | 必要に応じて、 構成された オブジェクトにアクセスします。 詳細については、「 ランタイム クラスの派生」を参照してください。 |
implements::AddRef 関数
implements オブジェクトの既定のインターフェイスの参照カウントをインクリメントします。
構文
unsigned long __stdcall AddRef() noexcept;
戻り値
新しい参照カウント。 この値は、テスト目的でのみ使用することを目的としています。
implements::find_inspectable 関数
implements オブジェクトによって実装された IInspectable インターフェイスへのポインターを取得します。 返されるポインターに対して AddRef を呼び出しません。 この関数を使用すると、iInspectable を必要とする関数に implements オブジェクトを渡すことができます。
構文
::IInspectable* find_inspectable() const noexcept override;
戻り値
implements オブジェクトによって実装される IInspectable インターフェイスへのポインター。
implements::find_interface 関数
implements オブジェクトによって実装されるインターフェイスへのポインターを取得します。これは、指定された識別子によって識別されます。 返されるポインターに対して AddRef を呼び出しません。
構文
void* find_interface(winrt::guid const& id) const noexcept override;
戻り値
implements オブジェクトによって実装されるインターフェイスへのポインター。指定された識別子によって識別されます。
implements::get_local_iids 関数
implements オブジェクトによって実装されるインターフェイスの識別子を含む 2 要素タプルを取得します。 "クローク" インターフェイス は含まれません。
構文
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
戻り値
implements オブジェクトによって実装されるインターフェイスの数と識別子を含む 2 要素タプル。
implements::get_strong 関数
winrt::implements オブジェクトのこのポインターへの厳密な参照を取得します。 「C++/WinRT の強参照と弱参照」をご覧ください。 get_strongは winrt::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_weakは winrt::implements 構造体テンプレートのメンバー関数であるため、C++/WinRT オブジェクトなどの winrt::implements から直接または間接的に派生するオブジェクトからのみ呼び出すことができます。 winrt::implements から派生されるものに関する詳細と例については、「C++/WinRT での API の作成」を参照してください。
構文
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 関数
implements オブジェクトの既定のインターフェイスの参照カウントをデクリメントします。
構文
unsigned long __stdcall Release() noexcept;
戻り値
新しい参照カウント。 この値は、テスト目的でのみ使用することを目的としています。
implements::operator Windows::Foundation::IInspectable
implements オブジェクトをWindows::Foundation::IInspectable に変換します。 この演算子を使用すると、iInspectable を必要とする関数に implements オブジェクトを渡すことができます。
構文
operator winrt::Windows::Foundation::IInspectable() const noexcept;
戻り値
は、Windows::Foundation::IInspectable に変換された オブジェクトを実装します。