Visual Studio 2010およびそれ以前のバージョンに付属するstd::vector
の実装はよく知られています。resize
メソッドのシグネチャは次のとおりです(C++ 03準拠) :std :: vectorの自己完結型STL互換実装
void resize(size_type new_size, value_type value);
代わりに長いC++ 11の前(GCCのSTL又はSTLportのような)他のSTL実装の大部分で使用されていますC++ 11準拠の署名:
void resize(size_type new_size, const value_type& value);
最初の変種の問題は、ある状況では
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
これは離れstd::vector
の異なる実装を使用してから満足な回避策とwellknown問題である:ション、それはvalue_type
アライメント仕様を有する場合、コンパイルに失敗します。
私は整列のための選択のコンテナとしての私のプロジェクトにドロップすることができMITスタイルのライセンスとstd::vector
のよく書かれた、十分にテストされた、自己完結型とSTL互換の実装を探していますタイプ。
私はそれをSTLportまたはgccのSTLから抽出することを検討しましたが、完全に標準に準拠していますが、それらは両方とも大した重要ではありません。
(私だけpush_back
、clear
、capacity
、size
、reserve
、resize
、swap
と配列のインデックスをサポートするstd::vector
の合理的なサブセットの実装と完全に幸せになる。)
任意のアイデア?
'.resize()'メソッドによって 'std :: vector
v;'宣言が失敗する仕組みがわかりません。クラステンプレートをインスタンス化しても、そのメソッドはインスタンス化されず、使用されたものだけがインスタンス化されます。 (この場合、デフォルトのctorとdtor)。 – MSalters私は、解析中にエラーが発生したと思います...ここでは、本当にコンパイラ固有の問題について話しています。 –