2

組み込みシステムの大きなプロジェクトに取り組んでいます。プロジェクトは、顧客のコード/ソリューションに統合する必要があるライブラリといくつかのバイナリです。そのため、可能な限り OS/プラットフォームに依存しないようにする必要があります。これまでのところ、問題なく組み込み Linux に取り組んできました。ただし、近い将来、非 Linux ベースのプラットフォームが参加する可能性があります。

私たちが扱っているプラ​​ットフォームの種類を説明するには、Java 仮想マシンなどの要求の厳しいモジュールを実行できる必要があります。

どの種類のプラットフォームが表示され、どの種類のコンパイラが提供されるかはわかりません。そのため、多くの問題を引き起こす可能性のある高度な C++ フューチャーやライブラリを使用することについて少し心配しています。主に、それによる非互換性の可能性を避けたいと思っています。

ソリューションのいくつかの C++ モジュールをリファクタリングしています。それらは本当にトリッキーであり、スマート ポインターのサポートは非​​常に役立ちます。最初は、カスタム スマート ポインター パッケージを作成することを考えましたが、少しリスクがあるように思えます (ここにバグがあると大きな頭痛の種になります)。そこで、boost のスマート ポインターを使用することを考えました。

ブーストのスマートポインターを使用すると、将来問題が発生すると思いますか?

私は bcp を使用してブーストのスマート ポインター パッケージを抽出しようとしましたが、他の多くのものがそれに伴います。4Mbのコードのようなもの。抽出されたディレクトリは次のとおりです。

config/compiler
config/stdlib
config/platform
config/abi
config/no_tr1
detail
smart_ptr
mpl (and subdirs)
preprocessor (and subdirs)
exception (and subdirs)
type_traits (and dubdirs)

それは私にはあまり移植可能ではないようです (しかし、私はそれについて間違っているかもしれません)。

皆さんはそれについてどう思いますか?

どうもありがとうございました。

4

3 に答える 3

1

Boostは非常にポータブルです。ライブラリのソースコードサイズは、ターゲット画像のサイズを示すものではありません。ライブラリコードの多くは未使用のままであり、ターゲットイメージに含まれません。

さらに、最も一般的な(そしてそれほど一般的ではなく廃止された)32ビットプラットフォームは、GCCの「ベアメタル」ポートによってサポートされています。ただし、GCCはOSなしで移植可能ですが、GNU libcはPOSIX準拠のOSを対象としているため、ベアメタルおよび非POSIX依存ポートは通常、uClibやNewlibなどの代替ライブラリを使用します。これらに加えて、GNU stdlibc ++は問題なく実行され、多くのBoostライブラリも実行されます。スレッドなどのBoostの一部は、サポートされていないターゲットへの移植が必要になります。スマートポインターなどの純粋なデータ構造関連の機能には、ターゲット環境への依存関係はありません。

于 2012-06-28T05:02:26.670 に答える
1

新しいコンパイラにはshared_ptr、C ++ 11/TR1が含まれています。C ++ 11のために、本当に必要な最新のコンパイラを使用している場合は、問題はありません。

現在TR1を使用できない顧客がいない場合は、TR1を使用してください。あなたは彼らが到着したときに将来の顧客に対処することができます-YAGNIはここに適用されます、そしてスマートポインタは非常に重要です。移動セマンティクスのようなC++11機能も同様です。

しかし、もしあなたが必死なら、あなたはあなた自身を転がすことができますshared_ptr-概念は特に複雑ではありません。

于 2012-06-28T05:32:11.420 に答える
1

スマート ポインターの使用を躊躇しないでください。抽出したスマート ポインター パッケージは、適切なすべてのコンパイラーに移植できるはずです。

お使いのコンパイラで動作しない場合は、コードの競合する部分を手動で置き換えることができます。ブースト コードは、さまざまなコンパイラのバグや不足している機能に対する回避策が含まれているため、より複雑です。これが、 Boost.PreprocessorまたはBoost.Typetraitsが追加された理由の 1 つです。

于 2012-06-26T15:32:35.870 に答える