По сути, вам нужно создать дополнительную функцию, ала:
std::string get(const std::string& field, const std::string& value_representation)
{
std::ostringstream oss;
if (field == "a")
oss << a;
else if (field == "b")
oss << b;
else
throw Not_Happy("whada ya want");
return oss.str();
}
Существует множество существующих фреймворков, например, библиотека для сериализации буста. Большинство из них включают объявление вашего класса с использованием некоторой разметки или, что еще хуже, делокализованных вторичных метаданных.
Если вам действительно нужно что-то менее инвазивное, то такие инструменты, как Gcc-XML и OpenC ++, позволяют автоматизировать генерацию этих функций (первые можно легко комбинировать с библиотеками XML, немного Python или Ruby, для простого, но низкая производительность выиграть).
Просто чтобы быть абсолютно ясным, C ++ не предоставляет никакого автоматизированного, совместимого со стандартами способа сделать это. Ни один из популярных компиляторов не предоставляет расширения для этого. В отчаянии, вы можете получить анализ собственной отладочной информации, но это определенно не рекомендуется.