Использование шаблонов и макросов для автоматического или полуавтоматического определения всего - почти единственная опция в C ++. C ++ имеет очень слабые способности к размышлению / самоанализу Однако, если вы хотите в основном сериализовать и хранить, это уже реализовано в библиотеках Boost Serialization . Вы можете сделать это, реализовав метод сериализатора в классе, или иметь внешнюю функцию , если вы не хотите изменять класс.
Похоже, это не то, что вы спрашивали. Я предполагаю, что вы хотите что-то вроде автоматической сериализации, которая не требует дополнительных усилий со стороны реализации класса. Они есть в Python и Java и во многих других языках, но не в C ++. Чтобы получить то, что вы хотите, вам нужно реализовать собственную объектную систему, например, мета-объектную систему, о которой Игх упоминал в своем ответе .
Если вы хотите это сделать, я бы посоветовал посмотреть, как JavaScript реализует объекты. JavaScript использует основанную на прототипах объектную систему , которая является достаточно простой, но достаточно мощной. Я рекомендую это, потому что мне кажется, что это было бы легче реализовать, если бы вам пришлось делать это самостоятельно. Если вы хотите прочитать ОЧЕНЬ многословное объяснение преимуществ и элегантности прототипов, вы можете найти эссе на эту тему в блоге Стива Йегге. Он очень опытный программист, поэтому я доверяю его мнению, но сам никогда этим не занимался, поэтому могу лишь указать на то, что сказали другие.
Если вы хотите остаться с более стилевым классом и экземплярами C ++ вместо менее знакомых прототипов, посмотрите, как работают Python объекты и сериализация . Python также использует подход «свойств» для реализации своих объектов, но свойства используются для реализации классов и наследования вместо системы, основанной на прототипах, поэтому он может быть немного более знакомым.
Извините, что у меня нет более простого ответа на ваш вопрос! Но, надеюсь, это поможет.