新しいサイズのstd::array
タイプを配列のサイズに多態的に使用する方法はありますか?私は、フォーム配列のサイズは共変ですか?
void DoSomething(std::array<int, 5>& myArray) {
/* ... */
}
そして、それがあるの機能を持っている場合には、ある数学的次の操作を行うために、明確に定義された(それは法的なC++コードではありません場合でも?)このImof
std::array<int, 10> arr;
DoSomething(arr);
数学的にはよく定義されていますが、std::array
という配列要素が連続し、このコードがコンパイルされるように記述する方法がありますか?私が考えることができる唯一のテクニックは、std::array<T, N+1>
がstd::array<T, N>
から継承されている奇妙なテンプレートメタプログラムを持つことですが、配列要素が連続しているとは思えません。
理由だけではなく、テンプレート化ではありません関数をコンパイル時の多態性にしたい場合は 'N 'に、実行時の多形性を望むなら' std :: vector'を使うだけです。 –
@ Karl Knechtel-「少なくとも5つの要素」または「少なくとも10の要素」の配列を常に取り込む関数を作成したいとします。私はテンプレートでこれを行うことができますが、コード全体の重複を招き、 'static_assert'-esqueコードが必要になります。これはエレガントではありません。私はこれを 'std :: vector'で静的にチェックすることはできません。関数をある程度の大きさの配列に入れるという考え方は、コンパイル時にチェックできるC99の静的サイズの配列パラメータのようにしようとする試みです。 – templatetypedef
私はあなたの例については分かりません。具体的には、私はあなたが「数学的に明確に定義された」という意味を理解しているかどうかはわかりません。 'DoSomething'では' std :: distance(myArray.begin()、myArray.end()) 'をクエリすると、結果はどうなるでしょうか? '5'または' 10'? –