Отражение во время компиляции в C ++ 1z?

В комитете по стандартизации C ++ существует исследовательская группа, которая обеспечивает отражение во время компиляции в C ++ 1z или после. Я хотел бы знать, какова цель и насколько мощными будут ожидаемые инструменты?

Например, можно ли назвать функции или классы с помощью этих инструментов?

struct A {int f() {return 42;}};
struct B {int (std::reflect<A>::member<0>::declname)() {return 43;}};
// equivalent to struct B {int f() {return 43;}};

Если он не будет таким мощным, какими будут типичные варианты использования?

32

Решение

Примеры использования отражений описаны в N3814:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3814.html

Общее мнение состоит в том, что мы сделаем это как расширение библиотеки признаков типа, примером которой является N3815:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html

Есть две части для размышления. Первый интроспекция. Взятие сущности и запрос постоянных значений об этом. Второй овеществление, что наоборот — использование значений для создания новых сущностей.

Для самоанализа — вы можете ожидать дополнительных характеристик, которые позволят вам перечислять и получать имена членов класса, базовых классов, перечислителей, параметров функций и так далее во время компиляции. Оттуда вы можете использовать их для таких вещей, как сериализация, членские операции, статические проверки и различные другие вещи.

Кроме того, позже мы рассмотрим реификацию, которая будет включать создание новых сущностей из постоянных значений с большей выразительностью, чем вы можете с помощью шаблона. Так что, возможно, вы могли бы заполнить std::class_specifier s структурировать, а затем вызвать make_type_from_spec(s) создать тип.

Подход самоанализа имеет больше консенсуса на данный момент, сторона реификации еще дальше.

32

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]