2009-05-28 7 views
3

Phoenix SDK 2008年6月(コンパイラ用ツール)をダウンロードしました。こんにちはサンプルのコードを読んでいると、本当に失われてしまいました。C++コードで見たことのない特別な演算子についての質問

public 
ref class Hello 
{ 
//-------------------------------------------------------------------------- 
// 
// Description: 
// 
// Class Variables. 
// 
// Remarks: 
// 
// A normal compiler would have more flexible means for holding 
// on to all this information, but in our case it's simplest (if 
// somewhat inelegant) if we just keep references to all the 
// structures we'll need to access as classstatic variables. 
// 
//-------------------------------------------------------------------------- 

static Phx::ModuleUnit    ^module; 
static Phx::Targets::Runtimes::Runtime^runtime; 
static Phx::Targets::Architectures::Architecture  ^architecture; 
static Phx::Lifetime     ^lifetime; 
static Phx::Types::Table    ^typeTable; 
static Phx::Symbols::Table    ^symbolTable; 
static Phx::Phases::PhaseConfiguration  ^phaseConfiguration; 

2質問:refキーワードとは何ですか? その記号は何ですか?それは、保護

を何をしているのです。

virtual void 
    Execute 
    (
    Phx::Unit^unit 
) override; 

};

オーバーライドもC++キーワードですか?これは私のVisual Studioで色付けされています。 私は本当にこのフレームワークを使いたいと思っていますが、この高度なC++は本当に障害です。ありがとうございました。

答えて

12

標準C++ではありません。C++/CLIです。

+3

私は、この種の「拡張機能」を防ぐために、Microsoftが何年も前に訴えた理由を推測しています。 – OscarRyz

+0

大雑把に言えば、 –

+6

拡張機能ではありません。これは別の言語です。それはC++ではありません。マイクロソフトはC++であると主張していません。 C++/CLIは、技術的に全く異なる獣です。 – jalf

5

これは、.NETで使用するためのMicrosoft拡張です。キャレットは、管理対象ヒープに格納されているオブジェクトへのハンドルを示します。素晴らしい説明はBran Bray'sブログを参照してください。

5

通常のC++コードではなく、.Netフレームワークの下でマネージコードとして実行されるように記述されたC++/CLIコードです。

  • REF - このクラスは参照型であり、それが管理ヒープに割り当てられ、ごみ
  • ^が収集される - この変数は、管理対象インスタンス
  • オーバーライドへのハンドルである - この方法は、オーバーライド基本クラスの実装
4

これは標準C++の一部ではありません。それはManaged C++を置き換えるために設計されたMicrosoftの言語仕様である、C++/CLIです:

C++/CLI(共通言語 インフラストラクチャ)C++のための も優先マネージ拡張を目的とするMicrosoftの 言語仕様です。 旧式のManaged C++構文(現在は が推奨されていません)を簡略化するために完全に改訂されました。 Managed C++よりもはるかに多く、 の明快さとコードの可読性を提供します。 C++/CLIはECMA-372としてEcmaによって標準化された です。現在、Visual Studio 2005 と2008( エディションに含まれています)でのみ利用可能な です。 this questionにロブウォーカーの答えで説明したように

キャレット記号は、ポインタのC++/CLIと同等です:

...キャレットは、*(ポインタ)の管理と同等 ですこれはC++/CLIで という用語が の「参照型」に「ハンドル」と呼ばれています( にはアンマネージポインタがあるため)。これを参照してください overview マイクロソフトから。

この「blog post」では、使い慣れた「クラスX」ではなく「refクラスX」の使用方法が説明されています。

関連する問題