0

サイズがテンプレート パラメーターに依存する固定サイズのデータ​​配列を含めたいテンプレート クラスを使用しています。簡単な例は

template<int D>
class Foo
{    
    private:
        int m_array[D*(D+1)];            
};

可変サイズの C 配列は、一般的には当然のことながら眉をひそめられますが、ここでは正当化できる可能性があります。なぜなら、Dは小さく、いくつの値m_arrayを保持できるか (そしてサイズを変更できないこと) が明確であるからです。私の質問は

  1. そもそも、これは実際に可変サイズの配列の正当な使用法ですか?
  2. これらの配列はコンパイラによって広くサポートされていないため、これは常に悪い習慣ですか?
  3. クリーンな代替手段はありますか?a を使用してstd::vector、コンストラクターでサイズを設定することもできますが、これはコードがわかりにくくなると私は主張します。std::arrayC++11 の を使用して、上記の例の関連する行を に変更する方が望ましいでしょうstd::array<int,D*(D+1)> m_array;か?
4

1 に答える 1

5

あなたの例は、C99 に存在するような可変長配列ではありません。そこでは、配列のサイズは実行時にのみわかります。

ここでは、コンパイル時の定数を使用して配列のサイズを設定します。そうしても問題ありません。行って楽しんでください。

于 2013-03-18T18:32:35.753 に答える