Базовый класс Init с массивом константных значений - PullRequest
0 голосов
/ 27 ноября 2018

Мой вопрос:

Если я предлагаю массив для константных элементов в базовом классе, а значения массива должны быть разными в некоторых производных классах, как лучше это сделать?

С одним значением это легко.С массивом я не знаю хорошего решения.

Конечно, этот код не работает, он просто продемонстрирует проблему и желаемое поведение:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...