C / C ++ Можно ли получить «список» членов экземпляра, запросив класс? - PullRequest
15 голосов
/ 06 ноября 2010

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

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

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

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

Члены должны иметь ["age", "hot", "name"] в качестве значений.

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

Спасибо

Ответы [ 3 ]

14 голосов
/ 06 ноября 2010

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

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

1 голос
/ 07 ноября 2010

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

1 голос
/ 06 ноября 2010

Я думаю, то, что вы ищете, называется Отражением. Это не легко сделать в C / C ++: http://www.garret.ru/cppreflection/docs/reflect.html http://en.wikipedia.org/wiki/Reflection_(computer_science)

...