ランタイム プラットフォームのコンポーネントの拡張機能

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

クラスを宣言します。

クラスと構造体 (C++ コンポーネント拡張)

value class

value struct

No

値クラスを宣言します。

クラスと構造体 (C++ コンポーネント拡張)

interface class

interface struct

No

インターフェイスを宣言します。

インターフェイス クラス (C++ コンポーネント拡張)

enum class

enum struct

No

列挙型を宣言します。

enum クラス (C++ コンポーネント拡張)

property

Yes

プロパティを宣言します。

プロパティ (C++ コンポーネント拡張)

delegate

Yes

デリゲートを宣言します。

delegate (C++ コンポーネント拡張)

event

Yes

イベントを宣言します。

event (C++ コンポーネント拡張)

オーバーライド指定子

次のキーワードは、派生のオーバーライド動作を修飾するために使用できます。 new キーワードは C++ の拡張ではありませんが、追加のコンテキストで使用できるキーワードとしてこの一覧に含めてあります。 一部の指定子は、ネイティブのプログラミングに対しても有効です。 詳細については、「方法: ネイティブ コンパイルのオーバーライド指定子を宣言します。」を参照してください。

キーワード

状況依存

目的

参照

abstract

Yes

関数またはクラスが抽象型であることを示します。

abstract (C++ コンポーネント拡張)

new

No

関数が基底クラスのバージョンのオーバーライドでないことを示します。

new (vtable の新しいスロット) (C++ コンポーネント拡張)

override

Yes

メソッドが基底クラスのバージョンのオーバーライドでなければならないことを示します。

override (C++ コンポーネント拡張)

sealed

Yes

クラスを基底クラスとして使用しないことを示します。

sealed (C++ コンポーネント拡張)

ジェネリックのキーワード

ジェネリック型をサポートするために追加されたキーワードを次に示します。 詳細については、「ジェネリック (C++ コンポーネント拡張)」を参照してください。

キーワード

状況依存

目的

generic

No

ジェネリック型を宣言します。

where

Yes

ジェネリック型パラメーターに適用される制約を指定します。

その他のキーワード

C++ 拡張に追加されたその他のキーワードを次に示します。

キーワード

状況依存

目的

参照

finally

Yes

例外処理の既定の動作を示します。

例外処理 (C++ コンポーネント拡張)

for each, in

No

コレクションの要素を列挙します。

各について、

gcnew

No

ガベージ コレクション ヒープに型を割り当てます。 newdelete の代わりに使用します。

ref new、gcnew (C++ コンポーネント拡張)

ref new

Yes

Windows ランタイム型を割り当てます。 newdelete の代わりに使用します。

ref new、gcnew (C++ コンポーネント拡張)

initonly

Yes

宣言または静的コンストラクターでしかメンバーを初期化できないことを示します。

initonly

literal

Yes

リテラル変数を作成します。

リテラル (C++ コンポーネント拡張)

nullptr

No

ハンドルまたはポインターでオブジェクトを参照しないことを示します。

nullptr (C++ コンポーネント拡張)

テンプレートの構成要素

次の言語構成要素は、キーワードとしてではなく、テンプレートとして実装されています。 /ZW コンパイラ オプションを指定した場合は lang 名前空間で定義され、 /clr コンパイラ オプションを指定した場合は cli 名前空間で定義されます。

キーワード

目的

参照

array

配列を宣言します。

配列 (C++ コンポーネント拡張)

interior_ptr

(CLR のみ) 参照型でデータを参照します。

interior_ptr (C++/CLI)

pin_ptr

(CLR のみ) CLR 参照型を参照して、ガベージ コレクション システムを一時的に無効にします。

pin_ptr (C++/CLI)

safe_cast

ランタイム型の最適なキャスト方法を特定して実行します。

safe_cast (C++ コンポーネント拡張)

typeid

(CLR のみ) 指定した型またはオブジェクトを表す Type オブジェクトを取得します。

typeid (C++ コンポーネント拡張)

宣言子

割り当てられたオブジェクトの有効期間と削除をランタイムで自動的に管理するように指定する型の宣言子を次に示します。

演算子

目的

参照

^

オブジェクトを識別するハンドル (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへのポインター) を宣言します。

オブジェクト演算子 (^) へのハンドル (C++ コンポーネント拡張)

%

追跡参照 (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへの参照) を宣言します。

参照演算子の追跡 (C++ コンポーネント拡張)

その他の構成要素と関連トピック

ここでは、その他のプログラミング構成要素と CLR の関連トピックを示します。

トピック

説明

__identifier (C++/CLI)

(Windows ランタイムおよび CLR) キーワードを識別子として使用できるようにします。

可変個引数リスト (...) (C++/CLI)

(Windows ランタイムおよび CLR) 関数で受け取ることができる引数の数を可変にします。

C++ ネイティブ型と等価な .NET Framework ネイティブ型 (C++/CLI)

C++ の整数型の代わりに使用される CLR 型を示します。

appdomain__declspec 修飾子

__declspec 修飾子は、appdomain ごとに静的変数とグローバル変数を必須にする修飾子です。

C スタイル キャストと /clr (C++/CLI)

C スタイル キャストがどのように解釈されるかについて説明します。

__clrcall 呼び出し規約

CLR 準拠の呼び出し規約を示します。

__cplusplus_cli

定義済みマクロ

カスタム属性 (C++)

独自の CLR 属性を定義する方法について説明します。

例外処理 (C++ コンポーネント拡張)

例外処理の概要を示します。

明示的なオーバーライド (C++ コンポーネント拡張)

メンバー関数で任意のメンバーをオーバーライドする方法を示します。

フレンド アセンブリ (C++)

クライアント アセンブリでアセンブリ コンポーネントのすべての型にアクセスする方法について説明します。

ボックス化 (C++ コンポーネント拡張)

値型がボックス化される条件を示します。

型の特徴のコンパイラ サポート (C++ コンポーネント拡張)

コンパイル時に型の特性を検出する方法について説明します。

マネージ、アンマネージ プラグマ

同じモジュールにマネージ関数とアンマネージ関数を共存させる方法を示します。

プロセス__declspec 修飾子

__declspec 修飾子は、process ごとに静的変数とグローバル変数を必須にする修飾子です。

リフレクション (C++/CLI)

CLR バージョンのランタイム型情報を示します。

文字列 (C++ コンポーネント拡張)

文字列リテラルから String へのコンパイラによる変換について説明します。

型の転送 (C++/CLI)

クライアント コードを再コンパイルしなくても済むように、出荷時のアセンブリの型を別のアセンブリに移動できるようにします。

ユーザー定義の属性 (C++ コンポーネント拡張)

ユーザー定義の属性を示します。

#using ディレクティブ (C++)

外部アセンブリをインポートします。

XML に関するドキュメント (Visual C++)

/doc (ドキュメント コメントの処理) (C/C++) を使用した XML ベースのコード ドキュメントについて説明します。

参照

その他の技術情報

Visual C++ での .NET プログラミング

ネイティブと .NET の相互運用性