Metroアプリを設計するためにC ++の学習という課題に取り組むことを検討していましたが、そのときにC ++ / CXに出会いました。
MetroアプリはC ++ 11でコーディングできますか?動作させるにはC ++ / CXが必要ですか?そして、C ++ / CXとは正確には何ですか?C ++のみを使用してMetroアプリを作成することは可能ですか、それともC ++ / CXが必要ですか?また、C ++ / CLIはこの図とどのように結びついていますか?
Metroアプリを設計するためにC ++の学習という課題に取り組むことを検討していましたが、そのときにC ++ / CXに出会いました。
MetroアプリはC ++ 11でコーディングできますか?動作させるにはC ++ / CXが必要ですか?そして、C ++ / CXとは正確には何ですか?C ++のみを使用してMetroアプリを作成することは可能ですか、それともC ++ / CXが必要ですか?また、C ++ / CLIはこの図とどのように結びついていますか?
回答:
Microsoftは、単純にWindows API(win32と呼ばれる)にアクセスできるC ++システムを作成していましたが、ある日、彼らは.NETを発明し、すべてを変更する必要があると考えました。
そこで、彼らは基本的にC ++であるが、__gc
.NET機能をサポートするようなキーワード(ネイティブ機能ではなくGCヒープに割り当てるなど)を追加した「Managed Extensions for C ++」を作成しました。
Microsoftはそれを再設計し、C ++ / CLIと呼んだように、T C ++は、すべてのそれらの余分のキーワードを持つ、追加のキーワードのはるかに小さいセットを持っていたが、のような導入構文の変更;しかし、人々はそれが本当にwasnとしてこれ好きではなかった^
とします( GCヒープ上の.NETオブジェクトへの参照「ポインター」)。
数年後、Microsoftは.NETが彼らが言った特効薬ではないことに気づき、彼らは戦闘中のWindowsチームと開発チームも合併しました。この再評価の一部は、完全にネイティブコードであるWinRTと呼ばれる新しいWindows APIの作成につながりました。これは、古い拡張機能がもはや有用ではないことを意味するため、Microsoftは、新しいWinRT APIの簡単化-C ++ / CLIからいくつかの拡張機能(^など)を保持することにより。
それでは、表面的にはC ++である拡張C ++の3つの異なるバージョンがあります。少なくとも最新バージョンはネイティブコードなので、APIに直接アクセスする必要がない場合は拡張機能を使用する必要はありません(WRLと呼ばれ、古いATLテンプレートクラスによく似ています)
クロスプラットフォームコードをコーディングする必要があると思われる場合は、API呼び出しを変更できますが、^
Visual C ++以外のコンパイラでは使用できません。WRL APIを使用し、C ++ / CXと比較して作成する必要のある「追加コード」を考慮して、コードを可能な限り標準に保つことをお勧めします。
引用http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx:
。。。C ++ / CXはC ++ / CLIと構文的に類似しているため、多くの点でほとんど同じに見えますが、意味的にはかなり異なります。C ++ / CXコードはネイティブコードであり、CLRは不要です。C ++ / CLIでのプログラミングは、2つの非常に異なるオブジェクトモデルを同時に巧妙に処理する必要があるため、非常に難しい場合があります。C++オブジェクトモデルとその確定的なオブジェクトの有効期間、およびガベージコレクションCLIオブジェクトモデルです。C ++ / CXは、COMに基づいたWindowsランタイムがC ++プログラミング言語に非常によくマッピングされるため、操作がはるかに簡単です。
Windowsランタイムは、比較的単純な低レベルのアプリケーションバイナリインターフェイス(ABI)を定義し、コンポーネントが共通のメタデータ形式を使用してそのタイプを定義することを義務付けています。C ++ / CXはネイティブのWindowsランタイムコンポーネントを記述するために厳密に必要ではありません。C++ / CX言語拡張機能を使用せずにC ++を使用してWindowsランタイムコンポーネントを記述することは非常に可能です。また、Visual C ++ 2012にはライブラリ、Windows Runtime C ++ Template Library( WRL)、これを容易にするため。Windowsの一部として(Windows名前空間で)出荷されるWindowsランタイムコンポーネントの多くは、WRLを使用して記述されています。C ++ / CXには魔法はありません:WindowsランタイムコンポーネントをC ++で書くのをはるかに簡単にし、WRLのようなライブラリベースのソリューションを使用するときに書く必要のある反復的で冗長なコードの量を減らすのに役立ちます。