C++/CX を簡単にまとめる

公開:2012-03-11 10:22
更新:2020-02-15 04:37
カテゴリ:c++/cx

C++/CX Quick Referenceのポイントとなりそうなものを訳してまとめてみた。

C++側から見るとWindows RuntimeはCOMへの回帰のように見える。COMはリソース管理でソースコードが冗長となり見通しが悪くなるのでC++/CXなる言語拡張をしてそのあたりを軽減しようとしているのではないか。

^修飾子 (T^)

Windows Runtime(WinRT) オブジェクトへのハンドル。

WinRTオブジェクトはすべてオブジェクトへのハンドルで宣言する。メンバへのアクセスは->演算子で行う。

^修飾子は"自動的に参照カウントされるWinRTオブジェクトへのポインタ"という意味を持つ。T^を定義するとコンパイラは、自動的に参照カウントを管理し参照カウントがゼロになればオブジェクトを破棄するコードを挿入する。

%修飾子(T%)

追跡参照。

WindowRTオブジェクトのみで宣言できる、追跡参照修飾子。メンバへのアクセスは.(ドット)演算子で行う。追跡参照修飾子は"自動的に参照カウントされるWinRTオブジェクトへの参照"を持つ。T%を宣言するとコンパイラは、自動的に参照カウントを管理し参照カウントがゼロになればオブジェクトを破棄するコードを挿入する。

ref new

WinRTオブジェクトを生成しオブジェクトへのハンドルを返す。

Array<T^>^(サイズ)もしくはWriteOnlyArray<T^>^(サイズ)

変更可能もしくは書き込みのみの1次元配列宣言である。

配列はそれ自身^修飾子で宣言される参照カウントオブジェクトへの参照でなければならない。

(ArrayはPlatform名前空間のテンプレートクラスとして宣言されている。)

ref class/struct

ref classはデフォルトのアクセスレベルがprivateであるWinRTクラスを宣言する。

ref structはデフォルトのアクセスレベルがpublicであるWinRTクラスを宣言する。

value class/struct

value classはデフォルトのアクセスレベルがprivateであるPOD構造体を宣言する。value classはC++構造体ではなくWindowsメタデータを表す。

value structはデフォルトのアクセスレベルがpublicであるPOD構造体を宣言する。value structはC++構造体ではなくWindowsメタデータを表す。

interface class/struct

interface classはデフォルトのアクセスレベルがprivateであるインターフェースを定義する。

interface structはデフォルトのアクセスレベルがpublicであるインターフェースを定義する。

public delegate

関数オブジェクトを表すオブジェクトを宣言する。

event

イベントオブジェクトを定義する。イベントオブジェクトはイベントが発生した時に呼び出させるイベントハンドラ(delegate)のコレクションである。

イベントハンドラを追加すると戻り値としてイベント・トークンが返される。イベントハンドラを明示的に削除する必要がある場合はイベント・トークンを保存しておく。イベントハンドラを明示的に削除するためには追加時のイベント・トークンを指定しなければならない。

property

メンバへのアクセスを行うメンバ関数を定義する。propertyでメンバ関数を定義するとデータメンバーへのアクセスと同じ文法でアクセスできる。

generic<T> interface class

パラメータ化インターフェースクラスを定義する。

generic<T> delegate

パラメータ化デリゲートを定義する。