C/С++ Возможно получить "список" членов экземпляра, запросив класс?
Предположим, что у нас есть структура в С++:
struct foobar
{
int age;
bool hot;
String name
};
Есть ли способ, программно, запросить описанную выше структуру для извлечения своих экземпляров? Например:
String[] members = magicClass.getInstanceMembers(foobar);
Члены имели бы ["age", "hot", "name"]
как значения.
Возможные? Причина, почему я спрашиваю, это потому, что у меня есть структуры, которые меняются со временем (добавлены/удалены переменные). Я хочу иметь возможность создавать автоматически генерируемые Lua файлы с этими сохраненными данными.
Спасибо
Ответы
Ответ 1
Нет, стандартный С++ не поддерживает этот тип отражения. Есть несколько "хакерских" способов использования макросов для создания шаблона типа-traque-esque, который будет использовать SFINAE для статического определения того, определенный класс имеет определенный член данных или функцию-член, но ничего, что фактически перечислит каждый член класса.
Фактически, С++ был разработан с определенной философией в виду, что было бы сложно, если не контрпродуктивно, поддерживать тип отображения времени выполнения, который мы видим на языках более высокого уровня, таких как С#/Java. См. Почему С++ не имеет отражения? для подробного обсуждения этой проблемы.
Ответ 2
Я думаю, что то, что вы ищете, называется Reflection. Это нелегко сделать в C/С++:
http://www.garret.ru/cppreflection/docs/reflect.html
http://en.wikipedia.org/wiki/Reflection_(computer_science)
Ответ 3
Если вы действительно хотите написать код "С++" с отражением, вы можете посмотреть, что ROOT
работает с cint
и генератор кода makecint
. Но это, вероятно, не то, что вы действительно хотите сделать...