У меня есть класс с массивом членов.Длина является константой, но эта константа не известна до времени компиляции (в моем реальном коде эта константа определяется по-разному для разных целей компиляции).Тип массива - это класс без конструктора по умолчанию.
#define CONSTANT 2
class Data {
public:
Data(int number){}
};
class DemoClass {
private:
Data _member[CONSTANT];
public:
DemoClass():
_member{
Data(0),
Data(0)
}
{
// stuff
}
};
В этом примере я могу установить _member
, используя список инициализатора.Однако, если значение COSNTANT
изменится, мне придется изменить этот список инициализатора.
Теоретически, изменение DemoClass
на конструктор по умолчанию, который вызывает другой конструктор с аргументом 0
, будетработать для моего случая, потому что я всегда буду вызывать конструктор Data
с 0
.Однако я не могу изменить DemoClass
, потому что он находится во внешней библиотеке.
Одно из решений, которое я рассмотрел, заключается в создании следующего класса:
class CustomData : public Data {
public:
CustomData() : Data(0){}
};
Это работает, но кажется, чтонемного сложно.Есть ли более простой способ инициализации этого массива?