Как обратиться к полю структуры по его строковому представлению в C++ (Arduino)?

Товарищи! Подскажите, пожалуйста, как в идеологии C++ (Arduino) решить такую задачу:

есть структура

struct DataStruct
{
int Data1;
int Data2;
};
struct DataStruct Content;

Нужно обратиться к Content.Data1 либо Content.Data2 в зависимости от внешнего условия. Полей в оригинальной структуре много, поэтому конструкции if не катят.

Как обратиться к нужному полю по шаблону Content.Data[строковый тип. номер поля]?
  • Вопрос задан
  • 3687 просмотров
Пригласить эксперта
Ответы на вопрос 3
@kocmoc941
C/C++ Developer
Я думаю уже не актуально, но нужно человеку давать правильный ответ даже если он не совсем корректный, кто сказал что нельзя !?:
struct DataStruct {
  #define Data(n) Data##n;
  int Data1;
  int Data2;
};
struct DataStruct Content;
Content.Data(1);
Content.Data(2); // и т.д.
Ответ написан
kosmos89
@kosmos89
Никак. Но можно заменить структуру на std::map , например.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Можно завести std::map, инициализировать его именами и адресами полей структуры и ходить через этот map, например так:
struct DataStruct {
    int Data1;
    int Data2;
};
struct DataStruct Content;
...
std::map<std::string, int DataStruct::*> data_struct_field;
...
data_struct_field["Data1"] = &DataStruct::Data1;
data_struct_field["Data2"] = &DataStruct::Data2;
...
Content.*data_struct_field["Data1"] = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы