Ответ 1
Варианты использования рефлексии описаны в N3814:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3814.html
Общий вид состоит в том, что мы будем делать это как расширение библиотеки Type Traits, как показано в N3815:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html
Есть две части для отражения. Первая - это интроспекция. Принимать сущность и запрашивать постоянные значения об этом. Второй - это reification, что является обратным - использование значений для создания новых объектов.
Для самоанализа вы можете ожидать дополнительные черты, которые позволят вам перечислять и получать имена членов класса, базовых классов, счетчиков, параметров функций и т.д. во время компиляции. Оттуда вы можете использовать их для таких вещей, как сериализация, операции с элементами, статические проверки и различные другие вещи.
Кроме того, мы рассмотрим вопрос о reification, который будет включать создание новых объектов из постоянных значений с большей выразительностью, чем вы можете с помощью шаблона. Поэтому, возможно, вы можете заполнить структуру std::class_specifier s
, а затем вызвать make_type_from_spec(s)
, чтобы создать тип.
Подход к интроспекции в настоящее время имеет больше консенсуса, сторона овеществления еще дальше.