2015-07-18 3 views
0

Я пытаюсь динамически присваивать значения из файла переменным в структуре, но не могу понять, как это сделать. У меня есть структура:Динамическое присвоение значения переменной структуры

struct abc { 
int age = 0; 
string name = "whatever"; 
} *ABC; 

У меня также есть функция, которая закругляется через файл, который может читать эти значения, так что я бы в конечном итоге с линией, которая содержит имя переменной и ее значение, которое нужно будет обновить. Так, например, я мог бы в конечном итоге с двумя переменными, такими как:

KEY="age" 
VAL="21" 

после того, как обрабатывает первую строку следующего файла:

age|21 
name|bill 

Как бы присвоить значение VAL для структуры ABC переменный ключ?

Спасибо!

UPDATE:

Поэтому я ищу, чтобы сделать что-то вроде:

ABC.KEY = VAL 

означает

ABC.age = 21 
+1

где играет ключевую роль в аЬс структуры? – InQusitive

+0

Имеет KEY и называет то же значение? вы думаете о назначении abc v; v.name = "age"; v.age = stoi ("21"); Propably. Кстати, это хорошая практика, чтобы объявлять типы с прописными буквами. Однако вопрос немного неясен. –

+0

@Robert благодарит за ответ! Не мог бы я получить доступ к переменным, используя ABC.age и ABC.name, приведенные в примере? И да, KEY в конечном итоге будет иметь значение «возраст» и «имя», поскольку он обрабатывает их соответствующие строки файла. – user1646428

ответ

1

Что вы ищете известен как отражение, и C++ не предлагайте эту возможность.

Если вы хотите совместить ключи с членами структуры, вам нужно будет построить структуру и функции, чтобы сделать это самостоятельно.

Например, вы можете считать это:

std::unordered_map<std::string, std::function<void(std::string, abc&)>> mapping; 
mapping["age"] = [](std::string str, abc& a) { a.age = std::stoi(str); }; 
mapping["name"] = [](std::string str, abc& a) { a.name = str; } 

Теперь вы можете использовать карту как

abc output; 
auto key = ...; 
auto value = ...; 
if (mapping.find(key) == mapping.end()) 
    throw ...; 
mapping[key](value, output); 
+0

Спасибо щенка. Все, что я видел, пытается настроить объекты и всевозможные вещи. Я просто стараюсь держать все как можно проще. Как будет выглядеть упрощенная функция для выполнения того, что мне нужно? – user1646428

+0

То, что вы хотите сделать, не просто, так что такой вещи нет. Простейшие структуры для использования влекут за собой построение сопоставления от одного к другому, которое может быть простым в навигации. – Puppy

+0

Действительно ?! Раньше я использовал карты, но мне сказали, что это нехороший вариант. Я переключился на использование структур, и теперь похоже, что я торгую одной проблемой для другой. – user1646428

Смежные вопросы