Мой вопрос:
Если я предлагаю массив для константных элементов в базовом классе, а значения массива должны быть разными в некоторых производных классах, как лучше это сделать?
С одним значением это легко.С массивом я не знаю хорошего решения.
Конечно, этот код не работает, он просто продемонстрирует проблему и желаемое поведение:
class Base1 {
public:
Base1( uint32_t const arr[] ) : m_arr( arr[] ) {}
// Base1( uint32_t const val ) : m_val( val ) {}
void f1() {
int const size = sizeof( m_arr ) / sizeof( uint32_t );
for( int idx = 0; idx < size; ++idx ) {
std::cout << "val: " << m_arr[idx] << std::endl;
}
}
private:
uint32_t const m_arr[];
// uint32_t const m_val;
};
uint32_t const c_arr_derived1[] = { 1, 2, 3 };
// uint32_t const c_val = 3;
class Derived1 : public Base1 {
public:
Derived1() : Base1 ( c_arr_derived1 ) {}
//Derived1() : Base1 ( c_val ) {}
};
- Iвозможно, можно определить разные массивы const в базовом заголовочном файле, использовать определение в производном классе и выбрать один из двух массивов с этим ... но это кажется неудобным.
- Я мог бы установить различные статические массивы const вбазовый класс (чтобы все массивы всегда были доступны в базовом классе), иметь их массив и использовать перечисление в производных классах для выбора одного из массивов в базовом классе.
Есть ли хорошие решения?
Примечание: производные классы, наконец, будут иметь чисто виртуальные функции с различными реализациями, поэтому я хочу абстрактный базовый класс
ОбновлениеЧто касается комментариев
- , как написано выше, это не обязательно допустимый c ++ (g ++ компилируется, если объявлено
static uint32_t m_arr[]
и определено соответствующим образом).Пример должен показать только то, чего я пытаюсь достичь - Я думаю, что если я не использую c ++ 11, я не могу использовать конструкторы для инициализации массивов;также массивы большие, в ctors я скорее хочу сослаться на константные массивы, определенные где-то еще, чтобы иметь чистый вид
- Я хочу данные
const
и в ПЗУ, и в идеале не копировать при построении.Если это возможно с std::vector
, может кто-нибудь вкратце изложить пример?Кажется, что-то.вроде здесь , наверное.Для больших массивов с постоянными данными (структурами) я бы предпочел иметь значения где-то еще, чем в ctor.