ランタイム プラットフォームのコンポーネントの拡張機能
Visual C++ には、ランタイム プラットフォームに対するプログラミングに役立つ言語拡張が用意されています。 Visual C++ コンポーネント拡張 (C++/CX) を使用することで、ネイティブ コードにコンパイルされる Windows ストア アプリやコンポーネントをプログラミングできます。 Windows ストア アプリを Windows ランタイム の COM インターフェイスに対して直接プログラミングして作成する方法もありますが、C++/CX を使用すると、コンストラクターや例外など、最新の C++ プログラミングの表現方法を使用できます。 .NET プラットフォームでマネージ実行環境での C++ プログラミングを有効にするには、C++/CLI を使用します。
2 つのランタイムに共通の拡張
C++/CX は C++/CLI のサブセットです。 C++/CX と C++/CLI に共通の拡張では、対象が共通言語ランタイム (CLR) か Windows ランタイムかに応じてセマンティクスが異なります。 アプリを Windows ランタイムで動作するようにコンパイルする場合は /ZW コンパイラ オプションを指定し、 CLR で動作するようにコンパイルする場合は /clr コンパイラ オプションを指定します。 Visual Studio を使用してプロジェクトを作成すると、これらのスイッチが自動的に設定されます。
C++ で Windows ストア アプリを作成する方法の詳細については、「Roadmap for Windows Store apps using C++」を参照してください。
C++/CLI は ISO/ANSI C++ 規格を拡張したものであり、Ecma C++/CLI 規格で定義されています。 詳細については、「Visual C++ での .NET プログラミング」を参照してください。
データ型のキーワード
言語拡張には、集計キーワードという、空白で区切られた 2 つのトークンで構成されるキーワードが含まれます。 これらのトークンは、単独で使用した場合と一緒に使用した場合で意味が異なることがあります。 たとえば、"ref" は通常の識別子であり、"class" はネイティブ クラスを宣言するキーワードです。 しかし、これらを組み合わせて ref class として使用した場合は、ランタイム クラスと呼ばれるエンティティを宣言する集計キーワードになります。
拡張には、状況依存のキーワードも含まれます。 キーワードが状況依存のキーワードとして扱われるかどうかは、キーワードを含むステートメントの種類と、そのステートメント内でのキーワードの配置で決まります。 たとえば、"property" というトークンは、識別子として使用されることもあれば、特殊なパブリック クラスのメンバーを宣言するために使用されることもあります。
次の表に、C++ 言語拡張のキーワードの一覧を示します。
キーワード |
状況依存 |
目的 |
参照 |
---|---|---|---|
ref class ref struct |
No |
クラスを宣言します。 |
|
value class value struct |
No |
値クラスを宣言します。 |
|
interface class interface struct |
No |
インターフェイスを宣言します。 |
|
enum class enum struct |
No |
列挙型を宣言します。 |
|
property |
Yes |
プロパティを宣言します。 |
|
delegate |
Yes |
デリゲートを宣言します。 |
|
event |
Yes |
イベントを宣言します。 |
オーバーライド指定子
次のキーワードは、派生のオーバーライド動作を修飾するために使用できます。 new キーワードは C++ の拡張ではありませんが、追加のコンテキストで使用できるキーワードとしてこの一覧に含めてあります。 一部の指定子は、ネイティブのプログラミングに対しても有効です。 詳細については、「方法: ネイティブ コンパイルのオーバーライド指定子を宣言します。」を参照してください。
キーワード |
状況依存 |
目的 |
参照 |
---|---|---|---|
abstract |
Yes |
関数またはクラスが抽象型であることを示します。 |
|
new |
No |
関数が基底クラスのバージョンのオーバーライドでないことを示します。 |
|
override |
Yes |
メソッドが基底クラスのバージョンのオーバーライドでなければならないことを示します。 |
|
sealed |
Yes |
クラスを基底クラスとして使用しないことを示します。 |
ジェネリックのキーワード
ジェネリック型をサポートするために追加されたキーワードを次に示します。 詳細については、「ジェネリック (C++ コンポーネント拡張)」を参照してください。
キーワード |
状況依存 |
目的 |
---|---|---|
generic |
No |
ジェネリック型を宣言します。 |
where |
Yes |
ジェネリック型パラメーターに適用される制約を指定します。 |
その他のキーワード
C++ 拡張に追加されたその他のキーワードを次に示します。
キーワード |
状況依存 |
目的 |
参照 |
---|---|---|---|
finally |
Yes |
例外処理の既定の動作を示します。 |
|
for each, in |
No |
コレクションの要素を列挙します。 |
|
gcnew |
No |
ガベージ コレクション ヒープに型を割り当てます。 new と delete の代わりに使用します。 |
|
ref new |
Yes |
Windows ランタイム型を割り当てます。 new と delete の代わりに使用します。 |
|
initonly |
Yes |
宣言または静的コンストラクターでしかメンバーを初期化できないことを示します。 |
|
literal |
Yes |
リテラル変数を作成します。 |
|
nullptr |
No |
ハンドルまたはポインターでオブジェクトを参照しないことを示します。 |
テンプレートの構成要素
次の言語構成要素は、キーワードとしてではなく、テンプレートとして実装されています。 /ZW コンパイラ オプションを指定した場合は lang 名前空間で定義され、 /clr コンパイラ オプションを指定した場合は cli 名前空間で定義されます。
キーワード |
目的 |
参照 |
---|---|---|
array |
配列を宣言します。 |
|
interior_ptr |
(CLR のみ) 参照型でデータを参照します。 |
|
pin_ptr |
(CLR のみ) CLR 参照型を参照して、ガベージ コレクション システムを一時的に無効にします。 |
|
safe_cast |
ランタイム型の最適なキャスト方法を特定して実行します。 |
|
typeid |
(CLR のみ) 指定した型またはオブジェクトを表す Type オブジェクトを取得します。 |
宣言子
割り当てられたオブジェクトの有効期間と削除をランタイムで自動的に管理するように指定する型の宣言子を次に示します。
演算子 |
目的 |
参照 |
---|---|---|
^ |
オブジェクトを識別するハンドル (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへのポインター) を宣言します。 |
|
% |
追跡参照 (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへの参照) を宣言します。 |
その他の構成要素と関連トピック
ここでは、その他のプログラミング構成要素と CLR の関連トピックを示します。
トピック |
説明 |
---|---|
(Windows ランタイムおよび CLR) キーワードを識別子として使用できるようにします。 |
|
(Windows ランタイムおよび CLR) 関数で受け取ることができる引数の数を可変にします。 |
|
C++ の整数型の代わりに使用される CLR 型を示します。 |
|
appdomain__declspec 修飾子 |
__declspec 修飾子は、appdomain ごとに静的変数とグローバル変数を必須にする修飾子です。 |
C スタイル キャストがどのように解釈されるかについて説明します。 |
|
__clrcall 呼び出し規約 |
CLR 準拠の呼び出し規約を示します。 |
__cplusplus_cli |
|
独自の CLR 属性を定義する方法について説明します。 |
|
例外処理の概要を示します。 |
|
メンバー関数で任意のメンバーをオーバーライドする方法を示します。 |
|
クライアント アセンブリでアセンブリ コンポーネントのすべての型にアクセスする方法について説明します。 |
|
値型がボックス化される条件を示します。 |
|
コンパイル時に型の特性を検出する方法について説明します。 |
|
マネージ、アンマネージ プラグマ |
同じモジュールにマネージ関数とアンマネージ関数を共存させる方法を示します。 |
プロセス__declspec 修飾子 |
__declspec 修飾子は、process ごとに静的変数とグローバル変数を必須にする修飾子です。 |
CLR バージョンのランタイム型情報を示します。 |
|
文字列リテラルから String へのコンパイラによる変換について説明します。 |
|
クライアント コードを再コンパイルしなくても済むように、出荷時のアセンブリの型を別のアセンブリに移動できるようにします。 |
|
ユーザー定義の属性を示します。 |
|
外部アセンブリをインポートします。 |
|
/doc (ドキュメント コメントの処理) (C/C++) を使用した XML ベースのコード ドキュメントについて説明します。 |