内容へ移動
C++プログラマのためのC++/CLI入門
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
TOP
»
cli
»
ボックス化
cli:ボックス化
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
{{indexmenu_n>9}} ====== ボックス化 ====== C++/CLIではすべての型はObject型から派生しているとしています。Objectはref classです。しかしint,charなどの基本型やvalue classなどは、Object型から派生しているとみなさないですむ場合はそうしたほうが高速にプログラムを動かせるのでそうしています。 このような型でも、Objectとみなしたい場合、ボックス化が行われます。ボックス化とは値型データを、マネージヒープ上に箱(メモリ)を確保しそこにコピーする作業です。コピーしたものは本物のObject派生型になります。 基本型をObjectとみなしたい例として、コレクション型を作るとき、コレクションへの追加関数として、Add(Object^ o)と定義する場合などがあります。 以下のように書くと、ハンドルは常にマネージヒープを指しているので、2 がボックス化されaがそれを指すようになります。 <code cpp> int^ a = 2; </code> ===== サンプルプログラム: ===== <code cpp> void PrintObject(Object^ o) { System::Console::WriteLine(o->ToString()); } ref class R { }; value class V { }; int main() { R r1; R^ r2 = gcnew R; V v1; V^ v2 = gcnew V; int a = 2; char c = 'a'; PrintObject(%r1); // スタックライクをハンドルに代入するには % を使います。 PrintObject(r2); PrintObject(v1); // ボックス化 PrintObject(v2); PrintObject(a); // ボックス化 PrintObject(c); // ボックス化 PrintObject("AAA"); // ボックス化 (String^) } </code>
/var/www/html/virtual/cppcli/data/pages/cli/ボックス化.txt
· 最終更新: 2013/12/23 09:08 (外部編集)
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ