Подтвердить что ты не робот

C/С++ Возможно получить "список" членов экземпляра, запросив класс?

Предположим, что у нас есть структура в С++:

struct foobar
{
      int age; 
      bool hot;
      String name
};

Есть ли способ, программно, запросить описанную выше структуру для извлечения своих экземпляров? Например:

String[] members = magicClass.getInstanceMembers(foobar);

Члены имели бы ["age", "hot", "name"] как значения.

Возможные? Причина, почему я спрашиваю, это потому, что у меня есть структуры, которые меняются со временем (добавлены/удалены переменные). Я хочу иметь возможность создавать автоматически генерируемые Lua файлы с этими сохраненными данными.

Спасибо

4b9b3361

Ответ 1

Нет, стандартный С++ не поддерживает этот тип отражения. Есть несколько "хакерских" способов использования макросов для создания шаблона типа-traque-esque, который будет использовать SFINAE для статического определения того, определенный класс имеет определенный член данных или функцию-член, но ничего, что фактически перечислит каждый член класса.

Фактически, С++ был разработан с определенной философией в виду, что было бы сложно, если не контрпродуктивно, поддерживать тип отображения времени выполнения, который мы видим на языках более высокого уровня, таких как С#/Java. См. Почему С++ не имеет отражения? для подробного обсуждения этой проблемы.

Ответ 3

Если вы действительно хотите написать код "С++" с отражением, вы можете посмотреть, что ROOT работает с cint и генератор кода makecint. Но это, вероятно, не то, что вы действительно хотите сделать...