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

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

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

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

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

членов ["age", "hot", "name"] как это ценности.

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

спасибо

3 ответов


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

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


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


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