C++/CX

C ++ / CX (C ++コンポーネント拡張)は、MicrosoftのWindowsランタイムプラットフォーム用の言語プロジェクションです。これは、C ++ コンパイラーの言語拡張の形式を取り、C ++プログラマーがWindowsランタイム(WinRT)APIを呼び出すプログラムを作成できるようにします。C ++ / CXは、C ++言語の拡張ではないC ++ / WinRT言語プロジェクションに取って代わられています。むしろ、それは完全に標準的な最新のISO C ++ 17ヘッダーファイルベースのライブラリです。
言語拡張機能はC ++ / CLIから構文を借用しますが、共通言語ランタイムとマネージコードではなく、WindowsランタイムユニバーサルWindowsプラットフォームの ネイティブコードを対象としています。これは、COMのWRLサブセットベースのWinRTプログラミングモデルをC ++ / CLIマネージ拡張のコーダーに直感的な方法で投影する一連の構文とライブラリの抽象化をもたらします。
下位レベルのWindowsランタイムC ++テンプレートライブラリ(WRL)を介して、ネイティブISO C ++からWindowsランタイムを呼び出すことができます。ただし、WRLはC ++ / WinRTにも置き換えられます。
内容
1 拡張構文
1.1 オブジェクト
1.1.1 参照カウント
1.1.2 クラス
1.1.2.1 ランタイムクラス
1.1.2.2 部分クラス
1.1.3 ジェネリック
2 メタデータ
3 ランタイムライブラリ
4 プリプロセッサベースの検出
5 も参照してください
6 参考文献
7 外部リンク
拡張構文
C ++ / CXは、Windowsランタイムのプログラミング用の構文拡張機能を導入しています。プラットフォーム固有ではない全体的な構文は、C ++ 11標準と互換性が
オブジェクト
WinRTオブジェクトは、C ++ / CLIから継承された(ハット)表記で宣言された変数を使用して作成またはアクティブ化され、ref new割り当てられ^ます。
Foo ^ foo = ref new Foo ();
WinRT変数は、仮想メソッドテーブルへのポインタとオブジェクトの内部データへのポインタのペアです。
参照カウント
WinRTオブジェクトは参照カウントされるため、shared_ptrsで囲まれた通常のC ++オブジェクトと同様に処理されます。オブジェクトにつながる参照が残っていない場合、オブジェクトは削除されます。
ガベージコレクションは含まれそれにもかかわらず、キーワードgcnewは将来の使用のために予約されています。
クラス
ランタイムクラス
コンポーネント拡張構造を含む可能性のある特別な種類のランタイムクラスがこれらは、を使用して宣言されているため、単にrefクラスと呼ばれref classます。
public ref class MyClass {};
部分クラス
C ++ / CXでは、部分クラスの概念が導入されています。この機能により、単一のクラス定義を複数のファイルに分割できます。これは主に、XAML グラフィカルユーザーインターフェイスデザインツールが、開発者が作成したロジックを壊さないように、別のファイルにコードを自動生成できるようにするためです。パーツは後でコンパイル時にマージされます。
C#のような.NET言語には、長年この機能が部分クラスはまだC ++標準に組み込まれていないため、純粋なC ++ 11では使用できません。
GUI設計者によって生成および更新されるため、プログラマーが変更しないでキーワードに注意してくださいpartial。
// foo.private.h #pragma once部分 参照 クラス foo { private : int id_ ; プラットフォーム::文字列^ name_ ; };
プログラマーがユーザーインターフェイスロジックを作成するファイル。クラスのコンパイラ生成部分が定義されているヘッダーがインポートされます。キーワードpartialは不要であることに注意して
// foo.public.h #pragma once #include “foo.private.h”ref class foo { public : int GetId (); プラットフォーム::文字列^ GetName (); };
これは、部分クラスのメンバーが実装されているファイルです。
// foo.cpp #include “pch.h”#include “foo.public.h”INT FOO ::のgetId () {戻り ID_ ;}プラットフォーム::文字列^ FOO ::関連項目GetName {戻り 名_ ;}
ジェネリック
Windowsランタイム、したがってC ++ / CXは、ランタイムベースのジェネリックをサポートします。コンパイル時の構造であるC ++テンプレートとは異なり、ジェネリック型の情報はメタデータに含まれ、実行時にインスタンス化されます。両方ともコンパイラーによってサポートされており、組み合わせることができます。
ジェネリック<型名 T > 公共 のref クラスの バッグ { プロパティ Tの 項目。};
メタデータ
参照:
メタデータ(CLI)
すべてのWinRTプログラムは、メタデータを介して宣言されたクラスとメンバーを公開します。フォーマットはの一部として標準化されたものと同じである共通言語基盤(CLI)から作成された標準の.NET Framework。このため、コードは、Windowsランタイムを対象とするC ++ / CX、CLI言語、およびJavaScript間で共有できます。
ランタイムライブラリ
C ++ / CXには、Windowsランタイムを対象とする一連のライブラリがこれらは、C ++標準ライブラリとWinRTの機能を橋渡しするのに役立ちます。
プリプロセッサベースの検出
__cplusplus_winrtプリプロセッサシンボルの存在をテストすることにより、C ++ / CX拡張機能がオンになっているかどうかを検出できます。
#ifdef __cplusplus_winrt // C ++ / CX固有のコードはここにあります… #endif
も参照してください
Windowsランタイム
参考文献
^ a b C ++ / WinRTの概要docs.microsoft.com
外部リンク
C ++ / CXデザインの内部-VisualC ++チームブログ
GoingNative 3:マリアンルパルとのC ++ / CXエピソード-チャンネル9
WinRTおよびwinmdファイル-MariusBancilaのブログ
Visual C ++言語リファレンス(C ++ / CX)

投稿日:
カテゴリー: C