2009-10-13 22 views
17

私は、楽しくC++スキルを拡張するための小さなC++プログラムを作成しています。その範囲は比較的小さいので、私はこのプログラムをWindowsとLinuxの両方に対応させることでクロスプラットフォーム開発を試みる予定です。学習とクロスプラットフォームの開発(C++)

私はC + +の能力がカジュアルと中間のレベルの間にあります:OO、テンプレートとデザインパターンのビット、前にSTLを使用して詳細を調べようとしています...しかし、プログラムの中で、私がC++を深く掘り下げていくにつれて、特にプラットフォームの違いやベンダーの実装の違いを理解して対処するときに感じる痛みが増えています。

Qtの、ACEのようなクロスプラットフォームのフレームワークを使用し、ブーストは生活を楽にするため、多くの開発をスピードアップするのに役立つと思われるが、これは私の目的を負かす事になります場合、私は心配しています。 C++クロスプラットフォーム開発を行うための「ベストプラクティス」があれば、誰かに助言を与えることができますか?ありがとう。

答えて

16

C++クロスプラットフォーム開発を行うための「ベストプラクティス」があれば誰かからアドバイスをいただけますか?

3つのものがあります:それは選択して抽象化/絶縁/ユーティリティ層の背後に

  • ラッププラットフォーム固有のAPI

  • ポータブルだよう

    1. は、独自のコードを書きますクロスプラットフォームライブラリ

    オプション#2または#3を選択できます。

    #2を超える#3の利点は、「すでに書かれ、デバッグされ、サポートされています」という傾向にあります。 「私はそれを学ばなければならない。私はそれを支払わなければならないかもしれないし、必ずしもそれを自分で支えることはできないし、私が望むものとまったく同じではないかもしれない」という欠点がある。

    開発者は、#2の代わりに#3の方が好きです(特に、あなたが挙げた3つのライブラリがすべて無料のオープンソースの場合)。

  • 2

    プラットフォーム間でGUIを使用しているのでなければ大きな問題にはなりません。

    は、ファイルシステム(ETCファイル名で異なる/ \区切り、使用できる文字)で行うにはいくつかの小さな問題がありますが、これらは、アプリケーションレベルではなく、C++です。

    主要アプリケーションの操作が複雑になると、ヘルプを処理し、複数の場所にセキュリティとユーザー情報をクロスプラットフォームでファイルする必要があります。単純なアルゴリズムタイプのプログラミングでは、問題はありません。

    Qtは主にGUIライブラリですが、余分なクロスプラットフォームのファイルシステムがあります。 STL、Boost、ACEはクロスプラットフォームですが、それは主要なポイントではありません。

    2

    これを使用してください。真剣に。 でない場合は、を使用する唯一の理由は、使用できない環境での作業を計画している場合のみです。しかし、クロスプラットフォームの性質を考えると、それはそうではありません。

    クロスプラットフォームではないにもかかわらず、それらを使用することによるメリットが大きいことがわかります。あなたが話す "ベストプラクティス"は、あなたの "製品"を簡潔かつ簡単に提供できるようにすることです。

    Xlibより上のレベルでGUIライブラリを使いたくないという人からの質問に、私はかつて答えました。彼が実際にXlibを使用していたのであれば、そのような抽象度の低いレベルでのコード作成が強制されたときに私たちが感じた痛みを知ることができました。これは、C/C++?Python/Perl/everthting-elseは単純に上位レベルのabstarctionなので、アセンブラでコードを作成するのと同じくらい意味があります。

    3

    gccを使用します。 WindowsとLinuxの両方で利用でき、ライブラリと言語の構文は両方のプラットフォームで同じです。

    クロスプラットフォームのGUIアプリケーションでは、Qtをお勧めします。プラットフォームの独立性を達成しようとすると、GUIフレームワークに依存してしまうことはなくなります。

    1

    私はあなたがACEまたは同等のライブラリを使用することから多くを学ぶことができると思います。彼らはあなたのC++の理解とデザインパターンを向上させます。私はこれがあなたのコーディングスキルを向上させるためにできる最良のものだと思います。

    1

    可能な限りクロスプラットフォームとしてコードを作成することに本当に関心がある場合は、できるだけ多くのコンパイラを使用してください。 WindowsとLinuxを使用している場合は、VCとgccを最低限使用してください。これにより、コンパイラ固有の機能を使用しないようにし、システム固有の動作に依存しないようにします。あなたがそれらにアクセスできる場合は、より多くのコンパイラ(Intel、IBMなど)とOS(OS X、Solaris)を使用してください。

    2

    この回答は本当に良かったし、どこに最初があるかを見つけるためのリストを作ることができます。クロスプラットフォーム開発には関係ない "移植アプリケーション"についての記事を読むべきだと思いますが、これはクロスプラットフォーム開発について非常に大きな視点を与えることができます。クロスプラットフォームではより多くの輸入ものの一つが「エンディアン」(tehnologiesまたはプラットフォーム用の差分を表示することができますバイトorder-バイト順)あなたはU ++>http://www.ultimatepp.org/index.html

    0

    のようにメモリの問題がある、開発。彼らはあなたのためにクロスプラットフォームのものを世話します。

    boost::filesystemは、すでに与えられた答えに詳細を提供する必要があります

    2

    利用ブーストを使用して試すことができます

    13

    http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

    良い例です。

    また、エンディアン、データタイプのサイズと相違を抽象化する既存のライブラリを使用することをお勧めします。クロスプラットフォームプロジェクトを開始する前に、以下を考慮する必要があります。

    GUI

    1. Qt
    2. XVT
    3. wxWidgets

    一般ライブラリ/フレームワーク

    1. STL (Incorporated in most platform libraries already)
    2. Boost

    ゲーム開発

    1. SDL
    2. Cocos2d-x
    関連する問題