8

C++/CLI は非常に強力な言語です。これは、マネージ コードとアンマネージ コードをシームレスに組み合わせることができる唯一の CLR 言語です。この言語を使用している (このサイトの) ソフトウェア開発者は何人ですか? どのようなプロジェクトで使用しますか? それはレガシー コードの適応ですか、それともオリジナルのソフトウェアの作成ですか? 古いマネージ C++ と新しい C++/CLI を比較できますか? C++/CLI の現在の品質と将来についてどう思いますか?

4

4 に答える 4

8

これを使用して、マネージ コードとネイティブ コードの間の統合の薄いレイヤーを記述しました。それだけです。

その最もよく知られているユニークな機能は、アンマネージ コードをシームレスに掘り下げ、プロセス全体で書き込み可能なメモリのビットを変更 (または誤って破損) できることです。これは、一般的なプログラミングでは利点ではありませんが、必要な場合には優れています。しかし、私はそれをますます必要としなくなると思います。/pure フラグを指定して C++/CLI をコンパイルできますが、実際にはまったく新しい言語になります。

他にも 2 つの大きなユニークな機能があります。

  • 何か役に立つデストラクタ。C# では、デストラクタはファイナライザです。C++ では、決定論的に呼び出される適切なデストラクタです。これは、C++/CLI が を操作するための最も完全なインフラストラクチャを備えていることを意味しますIDisposable。C# は ( usingステートメントを介して) クライアントにのみ役立ちますが、実装者にも役立つのは C++/CLI だけです。おそらくいつの日か C# がこの機能を吸収することを期待しています。

  • CLIジェネリックと一緒に使用できるダックタイピングテンプレート。C# で非常に便利なもう 1 つのことですが、歴史的な荷物がなくてもはるかにシームレスに作成できます。

しかし、C# は、一般的に C++/CLI を使用したくないという最後の 2 つの要素がなくても十分に機能します。

于 2009-04-01T07:42:28.910 に答える
5

シミュレーション プロジェクトに C++/CLI を使用しました。実際の計算を行うシミュレーション エンジンは、C++ で記述された既存のコード ベースでした。そのための GUI フロントエンドが必要でしたが、C++/CLI でコーディングすることに成功しました。

私の見解では、この言語は C# と同じくらい簡単にコーディングできますが、構文が少しぎこちなくなります。とはいえ、構文は、Microsoft が以前に考案したマネージ拡張機能よりもはるかに単純です。

C++/CLI の最も強力な機能の 1 つは、既存のネイティブ C++ コードを MSIL に簡単に再コンパイルできることです。もちろん、問題が発生する可能性はありますが、ほとんどのアプリケーションでは問題なく実行できるはずです。

C++/CLI の適合性については、厳密には C++ との相互運用性のための言語であり続けると思います。まったく新しいアプリを作成している場合、たとえば C# ではなく C++/CLI を選択する理由はまったくありません。私が言ったように、後者より少し使いにくいです。

于 2009-04-01T07:30:34.713 に答える
4

C++/CLI を広く使用しています。これを使用して古い MFC アプリケーションを .Net 時代にドラッグしたため、ほとんどの新しい機能を C# で記述し、C++/CLI を使用してそれを従来の MFC コードと統合できます。これには、ネイティブ クラスをラップすることと、新しいマネージド ビジネス オブジェクトを記述することの両方が必要です。 . 古いアセンブリでは、C++/CLI で新しい機能を作成しています。

「マネージ C++」の経験はありませんが、C++/CLI は MFC や Visual C++ と比較して使用するのが楽しいです。マネージ C++ や Visual C++ よりもはるかに簡潔な構文を備えており、ジュニア開発者でさえも問題なく使いこなすことができました。

C++/CLI には、マネージド クラスのメソッドにネイティブ オブジェクトを渡すときのように、興味深い動作がほとんどありません。呼び出しを行う目的だけで、ネイティブ オブジェクトの周りに (開発者には見えない) シン マネージド ラッパーが配置されます。 、しかし、そのシムはアセンブリに対してプライベートであるため、外部から呼び出すことはできません。いつものように、これを回避する方法はありますが、早い段階で数回私たちを捕まえました。

リファクタリングのサポートには Visual Assist X を使用し (許容範囲)、マネージド クラスの単体テストには MbUnit/Gallio を使用し、モッキング フレームワークには NMock または RhinoMocks を使用します。

全体として、言語は私たちの製品を救い、開発の世界で起こっているすべての新しい刺激的なものを利用できるようにしてくれたと思います. まだ Visual C++/MFC のみを使用していた場合、開発者の採用が困難になり、.Net を使用している場合よりも COTS の選択肢がはるかに制限されます。

于 2009-04-22T09:48:21.813 に答える
3

C++/CLI は、CLR を FreeSWITCH に組み込むのに非常に簡単でした。ホスティング API を処理したり、Mono を使用したりするよりもはるかに簡単です。

これより前にマネージ C++ を最後に使用したのは 2003 年かそこらでした。少し面倒で、シームレスに機能しなかったことを覚えています。

于 2009-04-01T07:31:47.893 に答える