-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Рефлексия над pointer-to-member на этапе компиляции #482
Comments
Reflection TS, если я его верно понял, имеет
и
Однако, вещей, похожих на |
На самом деле эту тему переиграли и вроде как рефлексию собираются делать через constexpr-объекты, а не шаблоны. Я написал что и где, возможно надо будет пересмотреть идею (?) А так - можно сделать вагон крутых идей, но неясно, дойдёт ли это до SG7. У меня такое ощущение, что эту лямку Andrew Sutton тянет чуть ли не в соло. |
За годы немало предложений свёрнуто с формулировкой «дождитесь интроспекции/рефлексии». Нужна какая-то проактивная позиция на этот счёт; я ничего не могу предложить лучше чем принести на стол больше мотивационных примеров. |
Всё же издам глас вопиющего в пустыне: зачем сходить с накатанной лыжни? |
Они очень плохо подходят для рефлексии. Использование шаблона его инстанцирует, инстанс при компиляции потребляет оперативную память компилятора за счёт увеличения количества элементов во внутренних структур компилятора. Структуры с большим количеством элементов тормозят т.к. замедляют поиски и ухудшают поподания в кеш. Если рефлексия инстанцирует шаблоны и одновременно работает с контейнерами хранящими инстансы - возникают сложности с инвалидацией указателей внутри компилятора |
Предложение по рефлексии https://wg21.link/P2996 |
У поля структуры есть три базовых представления:
offsetof
)Преобразование между тремя представлениями сделать сложно. Между первым и вторым конвертирует Type Loophole, но у этого трюка есть много ограничений, низкая скорость компиляции и т. д. Третье подключить можно, но с ещё большими ухищрениями (boostorg/pfr#60).
При этом последнее представление и наиболее полно, и наиболее надёжно реализовано в C++ (и С).
Предлагается считать его основным, и попросить компилятор объявить переменные, через которые определяются все преобразования:
В результате имплементация Boost.PFR сильно сократится:
Отсюда же порождается имплементация #468:
Не самым оптимальным образом, но порождается PR0908
index_of_member
может быть использован для метапрограммирования нестандартного расположения полей (SoA, упаковка и т. д.)The text was updated successfully, but these errors were encountered: