私は自分の大学のグループ シニア プロジェクトに取り組んでおり、コードを動作させる際に大きなハードルに遭遇しました。
8 ビット Atmel マイクロコントローラー用のコンパイラーは、new または delete 演算子をサポートしておらず、C++ STL もサポートしていません。C でプログラムすることもできましたが、これまでに行ったことのない A* アルゴリズムを実装する必要があります。私は最初に C を試しましたが、純粋な C をこれまでやったことがないことにすぐに気付きました。構造体と関数を使用してオブジェクトをモデル化しようとすると、速度が低下します。これは、よりクリーンな C++ 構文に慣れているためです。
とにかく、私のコンパイラの欠点の正確な表現はここにあります: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
それらを克服し、引き続き C++ を使用するために、次の可能性を検討しました。1) 何も割り当てず、テンプレートを使用してスタック上に固定配列を生成します。2)オブジェクトにスペースを割り当てたら、オブジェクトのコンストラクターを呼び出すためのハックを割り当てて見つけます。new は演算子ではないため、配置 new はオプションではありません。3) C を使って、それを吸い上げてください。それはマイクロコントローラーです。4) おそらく $$$ の費用がかかる、より優れたコンパイラを見つけてください。
2 番目のオプションは最も難しいですが、このコードをどのように記述できるかという点で最大の見返りがあります。ただし、間違った場合のデバッグは非常に苦痛になると思います。スタック上にオブジェクトを作成し、それらのビットを割り当てられたスペースにコピーし、オブジェクトのビットをゼロにしてデストラクタを呼び出さないようにすることを考えています。そのためには、unsigned char ポインターと sizeof 演算子を使用してビットに直接アクセスし、バイト カウントを取得します。
それはひどいように聞こえますし、確実に機能するかどうかはわかりませんが、検討しています。vtables が問題になる可能性があることはわかっていますが、vtables は 8 ビットのマイクロコントローラーにすぎないため、vtables を使用するつもりはありません。