Подстановка имени переменой

Stephan
Offline
Зарегистрирован: 01.10.2015

Здравствуйте уважаемые, помогите неразумному.

Задача следующая. Есть некий "конфиг" файл, данные в котором хранятся в секциях. В коде существует переменная типа String в которой хранятся имена секций:

String split[10]={"color","thermostat","delta","dallas","", и т.д};

Также в коде существуют переменные, имена которых идентичны названиям секций (хотя это не обязательно)

int color[20];
short thermostat[20][24];
byte delta_tm[20]; 
...
и т.д.

При чтении файла я определяю секцию, в которой нахожусь, и должен писать данные в соответствующую переменную т.е. если я в секции  split[0] - должен писать в "color[]", если в split[1] -> в "thermostat[]" и т.д.

Кроме switch-case ничего на ум не приходит, подскажите как быть...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

В лоб не получится, надо делать обвязку, т.к. у тебя разные типы данных в массивах хранятся (я имею в виду thermostat, delta_tm и пр.). Если грязный подход, что что-то типа этого:

int color[20];
short thermostat[20][24];
byte delta_tm[20];

byte* getArrayAddress(const char* sectionName, int& sizeOfArrayWar)
{
  if(!strcmp(sectionName, "color"))
  {
    sizeOfArrayWar = sizeof(int);
    return color;
  }

// и т.п.
}

Где надо - получаешь адрес массива, в который надо писать, заодно получаешь размерность его ячейки. Остальное - придётся ручками приводить/разруливать.

В общем, подходов разных много, выбирай любой :) Лично я бы сделал классами с одним абстрактным предком, где в каждом классе хранятся свои нужные данные и определена процедура вычитки данных из секции.