Скажем, у меня есть класс / структура, как показано ниже:
struct A {
uint32_t a;
uint8_t b;
uint16_t c;
};
И у меня есть набор строк, которые связаны с каждым членом A (могут быть разных целочисленных типов, но не целочисленных типовнапример, строки), например
"field1" -> A::a
"field2" -> A::b
"field3" -> A::c
Предположим, что всегда есть соотношение 1: 1 между строками и элементами.Есть ли элегантный способ сопоставить каждую строку каждому члену, используя что-то вроде std :: unordered_map?Я хочу иметь возможность читать и писать в каждое поле, используя строки в качестве ключей, например,
A a {1,2,3};
mymap["field1"] = 4; // a.a = 4
mymap["field2"] = 5; // a.b = 5
auto c = mymap["field3"]; // c = a.c = 3
Я использую C ++ 11/14 и не могу использовать повышение.
Еще немного информации о контексте этого вопроса : struct A
, упомянутый в вопросе, является настройками программы.Это параметры конфигурации оборудования, и моя программа используется для имитации поведения оборудования.Эти настройки / конфигурации генерируются скриптом struct
s, как указано выше.Мы читаем / пишем эти struct
члены, и поскольку количество этих настроек / конфигураций очень много (несколько тысяч), было бы удобно иметь возможность доступа к ним по их именам.Вот как и почему я хочу связать каждого члена со строкой.Является ли это подпиской или функцией доступа к соответствующим элементам, на самом деле не имеет значения, но существует такое соотношение 1: 1 между строкой (имя параметра) и сгенерированным элементом struct
.И, как я уже упоминал в этом вопросе, эти члены имеют разные целочисленные типы.