を呼び出さずにオブジェクト配列を作成するカスタムベクトルクラスが必要です。ここでは、テンプレートパラメータを使用してコンパイル時に容量が設定されます。組み込みシステム用のコンストラクタ
これまでメンバー変数としてオブジェクトの配列がありました。
template<class T, size_t SIZE>
class Vector {
...
T data[SIZE];
}
もちろん、ここでの問題は、TがPODでない場合、Tのデフォルトのコンストラクタが呼び出されることです。対応するpush()呼び出し(内部に新しいプレースメントがある)までデータを初期化しないようにする方法はありますか?ただ、
uint8_t data[SIZE * sizeof(T)];
はおそらく我々は絶対に動的メモリを使用することはできませんT.のアラインメントを破る使用して、合計コンテナのサイズは、常にコンパイル時に知られている必要があります。コンパイラはまだC++ 11をサポートしていませんので、我々はまた、C++のalignas指定子を使用することはできません:(
好奇心から:「Tのアラインメントを壊す」とはどういう意味ですか?'sizeof(T)'バイトの中にあるものに限定された問題はありませんか?私はこれがどのように問題を引き起こすかを見ていません – user463035818
これまで最高の解決策ではありませんが、オブジェクトを「初期化されていない」、ブール値などで保存されたデフォルトのコンストラクタを作成するだけではできませんか? – Aziuth
新しいプレースメントのユースケースに似ています。 –