Нет, это невозможно: пока size
является динамической переменной, array[size]
невозможно реализовать в виде статического массива.
Если хотите, подумайте об этом следующим образом: sizeof(test)
должен быть известен во время компиляции (например, рассмотрим массивы test
).Но sizeof(test) == sizeof(int) * (1 + size)
в вашем гипотетическом примере, который не является известным значением во время компиляции!
Вы можете сделать size
параметром шаблона;это единственное решение:
template <unsigned int N>
class Test
{
int array[N];
static const unsigned int size = N; // unnecessary really
public:
// ...
};
Использование: Test<50> x;
Обратите внимание, что теперь у нас есть sizeof(Test<N>) == sizeof(int) * (1 + N)
, что равно на самом деле известно время компиляциизначение, потому что для каждого N
, Test<N>
есть отдельный тип.