クラスのテンプレート パラメータとして整数を使用しようとしています。コードのサンプルを次に示します。
template< int array_qty >
class sample_class {
public:
std::array< std::string, array_qty > sample_array;
}
私がこのようなことをすると、うまくいきます:
sample_class< 10 > sample_class_instance;
ただし、コンパイル時に array_qty (テンプレート パラメーター) の値がわからず、実行時にしかわからないとしましょう。この場合、基本的にはテンプレート引数として int 変数を渡します。デモンストレーションのために、次のコードは機能しません。
int test_var = 2;
int another_test_var = 5;
int test_array_qty = test_var * another_test_var;
sample_class< test_array_qty > sample_class_instance;
上記を試すと、コンパイル時に次のエラーが発生します。
the value of ‘test_array_qty’ is not usable in a constant expression
テンプレートパラメーターとして渡すときに test_array_qty を const に変換しようとしましたが、それでもうまくいかないようです。これを行う方法はありますか、またはテンプレート パラメーターを誤用していますか? おそらく、それらはコンパイル時に認識される必要がありますか?
目標は、この特定のアプローチを解決することではなく、クラスをインスタンス化するときに指定できる int 変数に配列の長さを設定する方法を見つけることです。テンプレート パラメーターを介してこれを行う方法があれば、それが理想的です。
これには配列を使用する必要があり、最終的に提案になる可能性のあるベクトルではないことに注意してください。さらに、違いが生じる場合に備えて、array_qty は常に 0 から 50 の間の値になります。