2012-04-14 5 views
4

私はFITS画像を「積み重ねる」アプリケーションを開発しようとしています。 FITS画像を読むためには、CCFits(C++ライブラリ)またはCFITSIO(Cライブラリ)を使用できます。ネイティブObjective-Cライブラリはありません。Cocoaアプリケーションで大きなC++ライブラリを使用することをお勧めしますか?

オブジェクト指向の設計が可能なので、CCFitsを使用することをお勧めします。これは、プログラムの整理をより容易にするためです。私はすでにCFITSIOを使用しようとしましたが、しばらくすると大変扱いにくくなります(もちろん、これは大規模なアプリケーションを開発する経験がないためです)。

全体として、これにアプローチするにはどうすればよいでしょうか?私はCFITSIO関数のラッパーを記述し、自分のクラスを書くべきですか? Objective-CでC++クラスを使用する方法はありますか?ライブラリにはかなりのクラスが含まれていますが、不透明なポインタを使用してクラスをラップすることはできますが、クラス継承のようなものはどのように保持されますか? Objective-Cでクラスを手動でサブクラス化し、そこにサブクラスをラップする必要がありますか?

答えて

3

Objective-C++を使用してC++とObjective-Cを簡単に混在させることができます。 XCodeでは.mファイルの名前を.mmに変更するだけで、Objective-C++として認識されます。次にObjective-Cコード(some restrictions apply、しかし多くはない)でC++クラスを使用することができます。

Objective-CはCの拡張版なので、Objective-CプログラムでCライブラリを簡単に使用できます。

2

@myrkosによれば、C++とObjective-Cの混合は簡単です。 しかし、2つの言語がどのように相互作用するかを注意深く読んでください。 特に、Objective-CクラスをC++クラスから継承することはできません。その逆もあります(これはあなたの質問で暗示されているようです)。

これは実際には問題ではありません。

しかし、それらは非常にうまく構成されます(つまり、C++クラスのメンバーとしてObjective-Cオブジェクトを持つことができます。そのすべてが.mmファイルである限り)。 Objective-CクラスのivarとしてC++オブジェクトを値で保持すると、自動的にコンストラクタとデストラクタが呼び出されます。

0

全体的に、これにアプローチするにはどうすればよいでしょうか?

快適なバリアント(CCフィット)を使用してください。

私はCFITSIO関数のラッパーを記述し、私自身のクラスを書くべきですか?

Objective-CでC++クラスを使用することが方法です - ライブラリには、かなりの数のクラスが含まれていますし、私は、クラスを包み込むように、不透明なポインタを使用することができます知っているが、どのようにクラス継承のようなものは保存されますか?

Objective-C++では、C、Objective-C、およびC++プログラムを同じ翻訳で、ごくわずかな問題で使用することができます。したがって、必要に応じて、実装でCocoaとC++を混在させることができます。 C++クラスはObjC型を保持でき、ObjC型はC++型を保持できます。

Objective-Cでクラスをサブクラス化してサブクラスをラップする必要がありますか?

そのままCCFitsライブラリをそのまま使用してください。 ObjC型でラップすることで得ることはほとんどなく、のが失われます。

いくつかの領域で厳密なObjCを使用したい場合は、ObjCインタフェースの背後にあるC++型を隠す方法(ラッパーインタフェースではなく、アプリケーションのCCFitの高レベルインタフェース)を学ぶ必要があります。

関連する問題