У меня сложная проблема с «переопределяющими» статическими массивами. У меня есть статические массивы (для простоты), которые имеют фиксированную длину в разных производных классах, но все же все размеры известны во время компиляции. У меня также есть виртуальная функция в базовом классе, но я не знаю, как решить проблему переопределения этих массивов и массивов в производных классах, чтобы эта виртуальная функция работала правильно, т. Е. Дает размеры и массив содержимое из производных классов. Пример:Переопределение статических элементов и статических статических массивов
class B {
private:
// these two are not really meaningful in this class (ABC)
static const int n = 1;
static double da[n];
public:
virtual void f()
{
for(int i = 0; i < n; ++i)
{
// do something with n and da
std::cout << n << std::endl;
}
}
};
class D1 : public B {
private:
// these are subclass-specific (i.e. n might also change)
static const int n = 4;
static double da[n];
};
class D2 : public B {
private:
// these are subclass-specific (i.e. n might also change)
static const int n = 6;
static double da[n];
};
double D1::da[] = {1., 2., 3., 4.};
// ...
int main()
{
B *p = new D;
p->f(); // I'd like to see 4 instead of 1
}
Не могли бы вы предложить исправить или по-другому сделать это правильно? Я думаю, std :: vector сделал бы это (?), Но ему нужно много работы, чтобы адаптироваться к моему существующему коду. Большое спасибо, Peter
Большое спасибо, я попробовал это, как вы предложили, и работает, как и ожидалось. К сожалению, я хочу иметь возможность использовать динамический полиморфизм над интерфейсом B, который, я думаю, невозможен таким образом. Или это? – Peter