ポインタのサイズは変化しません。コンパイラではなくプラットフォームとモジュールのビット数に依存します(32ビットと64ビットなど)。
基本的に他のすべてのもののサイズは異なりますが、はどのようなものが異なるのですか?はテンプレートです。
構造体のパディングとアライメントは、コンパイラに依存する傾向があり、多くの場合、コンパイラ内で設定される傾向があります。ポインタは一般的にプラットフォームのビット境界境界にあり、その後は3バイトを持つような緩やかな規則がありますが、それをどのように処理するかはコンパイラによって異なります。
テンプレート、特にSTL(各コンパイラごとに異なる)からのテンプレートは、メンバー、サイズ、パディングなどが異なる場合があります。唯一の標準的な部分はAPIですが、バックエンドはSTL実装に任されています(いくつかの規則がありますが、コンパイラはテンプレートを別々にコンパイルできます)。 1つのビルドからモジュール間でテンプレートを渡すことは十分ではありませんが、異なるコンパイラ間では致命的になることがよくあります。
標準化されていない(ネームマングリング)、または必要性(メモリ割り当て)が非常に特殊なものも互換性がありません。いずれにしても、作成したライブラリを破棄して(デリゲートを取るSTLオブジェクトを使用して)割り当てを行い、エクスポートされたメソッドに装飾されていない名前および/またはCスタイル(extern "C"
)を使用してエクスポートするだけで、 。
私はコンパイラがvtableの仮想デストラクタをどのように処理しているかを少し忘れているように思います。
オブジェクトの参照のみを渡すことができ、外部から見えるテンプレートを完全に避け、主にポインタとエクスポートまたは仮想メソッドで作業する場合は、大部分の問題を避けることができますほとんどのコンパイラと言語で)。書くのは苦痛かもしれませんが、互換性が必要な場合は可能です。
問題のすべてではないが一部を軽減するために、QtのコアライブラリのようなSTLの代替機能を使用すると、その特定の問題が取り除かれます。古いプロジェクトにQtを投げ込むのは厄介なことですが、「すべてを試してみましょう!!!」よりも膨らんでしまいます。 STL缶を使用するよりも、ライブラリーとコンパイラーのデカップリングに役立ちます。
"G ++" とは何ですか? GNU C++コンパイラ(「g ++」)は、MinGWのバリエーションです。はい? – selbie
はい、あなたは正しいです。私はこれをこの質問に広告します。 –
送信する構造は、いつでも/マーシャル/(他の多くの名前)をシリアル化することができます。あなたが持っているかもしれない問題を理解するためにちょうどGoogleのC + + stuct埋め込み。あなたがファイルやネットワークのようにデータを扱うなら、あなたは大丈夫でしょう。あなたのヘッダーの細部の角をカットすることができます。ちょうどデータが正しい場所にあることを確認してください(つまりパディングなし) –