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ます。
パブリック参照クラスMyClass {{};
部分クラス
C ++ / CXでは、部分クラスの概念が導入されています。この機能により、単一のクラス定義を複数のファイルに分割できます。これにより、主にXAML グラフィカルユーザーインターフェイスデザインツールで、開発者が作成したロジックを壊さないように、別のファイルにコードを自動生成できます。パーツは後でコンパイル時にマージされます。
C#のような.NET言語には、長年この機能が部分クラスはまだC ++標準になっていないため、純粋なC ++ 11で使用することはできません。
GUIデザイナーによって生成および更新されるファイルであり、プログラマーが変更しないでキーワードに注意してくださいpartial。
// foo.private.h #pragma once部分参照クラスfoo {{プライベート: int id_ ; プラットフォーム::文字列^ name_ ; };
プログラマーがユーザーインターフェイスロジックを作成するファイル。クラスのコンパイラー生成部分が定義されているヘッダーがインポートされます。キーワードpartialは不要であることに注意して
// foo.public.h #pragma once #include “foo.private.h” refクラスfoo {{パブリック: int GetId (); プラットフォーム::文字列^ GetName (); };
これは、部分クラスのメンバーが実装されているファイルです。
// foo.cpp #include “pch.h” #include “foo.public.h” int foo :: GetId (){ return id_ ;} プラットフォーム::文字列^ foo :: GetName { return name_ ;}
ジェネリック
Windowsランタイム、したがってC ++ / CXは、ランタイムベースのジェネリックをサポートします。コンパイル時の構成であるC ++テンプレートとは異なり、ジェネリック型の情報はメタデータに含まれ、実行時にインスタンス化されます。両方ともコンパイラーによってサポートされており、組み合わせることができます。
ジェネリック<タイプ名 T >パブリック参照クラスバッグ{
プロパティTアイテム; };
メタデータ
参照:
メタデータ(CLI)
すべてのWinRTプログラムは、メタデータを介して宣言されたクラスとメンバーを公開します。形式は、.NET Frameworkから作成された標準である共通言語インフラストラクチャ(CLI)の一部として標準化されたものと同じです。このため、コードは、Windowsランタイムを対象とするC ++ / CX、CLI言語、およびJavaScript間で共有できます。
ランタイムライブラリ
C ++ / CXには、Windowsランタイムを対象とする一連のライブラリがこれらは、C ++標準ライブラリとWinRTの機能を橋渡しするのに役立ちます。
プリプロセッサベースの検出
__cplusplus_winrtプリプロセッサシンボルの存在をテストすることにより、C ++ / CX拡張機能がオンになっているかどうかを検出できます。
#ifdef __cplusplus_winrt // C ++ / CX固有のコードがここに表示されます… #endif
も参照してください
Windowsランタイム
参考文献
^ ++ / WinRTの概要docs.microsoft.com
外部リンク
C ++ / CXデザインの内部-VisualC ++チームブログ
GoingNative 3:マリアンルパルとのC ++ / CXエピソード-チャンネル9
WinRTおよびwinmdファイル-MariusBancilaのブログ
Visual C ++言語リファレンス(C ++ / CX)