Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций.
Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?
PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.
Здравствуйте, push, Вы писали:
P>Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций. P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?
P>PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.
рекомендую сначала гуглом прощупать тему, затем более конкретно спросить какой сценарий использования вам кажется надуманным
еще набросайте ссылки, которые вы прочитали, чтобы понимать ваше видение инструмента.
в частности, вы про динамическую или статическую рефлексию?
есть еще отдельный немного более узкий термин интроспекция
— Serialization
— Better meta-programming
— Type transformations
— Event Driven Development
— Test Driven Development
— GUI Property Editors
— Database-Object mapping interface
— Auto Documentation
— Automatic verification of concepts ( assert on templates )
— Reflecting constructors, allow GUI Forms with widgets as sub objects ( without pointers )
Здравствуйте, push, Вы писали:
P>Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций. P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?
Ну например, можно будет написать библиотеку, которая умеет произвольную (в разумных пределах) структуру превращать в JSON, и структуру не придется описывать дважды. Или можно будет написать библиотеку, которая зачитывает конфигурационный файл, и раскладывает его по структуре, попутно проверяя типы.
Здравствуйте, push, Вы писали:
P>PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.
Вот у меня в Sciter например...
Если бы в C++ была рефлексия тогда бы из скрипта можно было работать с C++ объектами напрямую.
Т.е. ты мне даешь экземпляр класса а я в скрипте могу узнать какие поля и методы у него есть.
И это не только для Sciter. Интеграция любого script (Python, Lua, Ruby, JS) с native code.
Причём интерфейс у special_widget_vector идентичный vector<Widget>, то есть widgets[10].value. Это может потребоваться для оптимизации обходов массивов, когда при обходе используется только часть данных, для использования SIMD, плюс экономия на выравнивании: https://en.wikipedia.org/wiki/AOS_and_SOA
Сейчас в C++ это можно реализовать на макросах подобных BOOST_FUSION/HANA_DEFINE_STRUCT. При наличии рефлексии/реификации это может происходить полностью в автоматическом режиме.
другой пример — Object-Relational Mapping — в этом примере используются макросы. А в некоторых решения для этого применяется внешний разбор кода, как например в ODB.
При наличии рефлексии/реификации можно было бы обойтись без всего этого.
Спасибо всем!
Кажется нашёл несколько областей, где рефлексия получила бы преимущество перед существующими библиотеками (например как boost::HANA):
работа с С++ из скрипта напрямую
красивая диагностика
можно будет отказаться от внешних генераторов/внешнего разбора кода. Но с оговоркой — тут надо смотреть как в итоге рефлексия будет реализована.