Для чего нужна рефлексия в С++?
От: push  
Дата: 24.01.17 13:52
Оценка:
Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций.
Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?

PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.
Re: Для чего нужна рефлексия в С++?
От: uzhas Ниоткуда  
Дата: 24.01.17 14:17
Оценка:
Здравствуйте, push, Вы писали:

P>Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций.

P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?

P>PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.


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

вот что я нагуглил:
https://root.cern.ch/blog/status-reflection-c

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0255r0.pdf

тут явно выделена основная мотивация:

3 Motivation [motivation]

— 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 )


и пример

9 Sample [sample]
9.1 JSON Serializer [sample.json]
....
page 20

Re: Для чего нужна рефлексия в С++?
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.01.17 15:20
Оценка: +1
Здравствуйте, push, Вы писали:

P>Вот смотрю в сети много обсуждений рефлексии в С++, много различных вариантов реализаций.

P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?

Ну например, можно будет написать библиотеку, которая умеет произвольную (в разумных пределах) структуру превращать в JSON, и структуру не придется описывать дважды. Или можно будет написать библиотеку, которая зачитывает конфигурационный файл, и раскладывает его по структуре, попутно проверяя типы.
Re: Для чего нужна рефлексия в С++?
От: c-smile Канада http://terrainformatica.com
Дата: 24.01.17 21:39
Оценка: +1
Здравствуйте, push, Вы писали:

P>PS: что такое рефлексия я в курсе, я пока не могу представить проблему, где бы я выбрал её для решения.


Вот у меня в Sciter например...

Если бы в C++ была рефлексия тогда бы из скрипта можно было работать с C++ объектами напрямую.
Т.е. ты мне даешь экземпляр класса а я в скрипте могу узнать какие поля и методы у него есть.

И это не только для Sciter. Интеграция любого script (Python, Lua, Ruby, JS) с native code.
Re: Для чего нужна рефлексия в С++?
От: Evgeny.Panasyuk Россия  
Дата: 24.01.17 23:06
Оценка: +1
Здравствуйте, push, Вы писали:

P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?


Например автоматическое преобразование структур в нужную форму.
К примеру на входе метапрограммы структура:
struct Widget
{
    int id;
    double value;
};
vector<Widget> widgets;
а на выходе:
struct TransformedWidget
{
    vector<int> ids;
    vector<double> values;
};
special_widget_vector widgets;

Причём интерфейс у special_widget_vector идентичный vector<Widget>, то есть widgets[10].value. Это может потребоваться для оптимизации обходов массивов, когда при обходе используется только часть данных, для использования SIMD, плюс экономия на выравнивании: https://en.wikipedia.org/wiki/AOS_and_SOA
Сейчас в C++ это можно реализовать на макросах подобных BOOST_FUSION/HANA_DEFINE_STRUCT. При наличии рефлексии/реификации это может происходить полностью в автоматическом режиме.
Отредактировано 24.01.2017 23:07 Evgeny.Panasyuk . Предыдущая версия .
Re: Для чего нужна рефлексия в С++?
От: Evgeny.Panasyuk Россия  
Дата: 24.01.17 23:12
Оценка: +1
Здравствуйте, push, Вы писали:

P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?


Вот
Автор: Evgeny.Panasyuk
Дата: 11.07.16
другой пример — Object-Relational Mapping — в этом примере используются макросы. А в некоторых решения для этого применяется внешний разбор кода, как например в ODB.
При наличии рефлексии/реификации можно было бы обойтись без всего этого.
Re: Для чего нужна рефлексия в С++?
От: antropolog  
Дата: 24.01.17 23:47
Оценка: +1
Здравствуйте, push, Вы писали:

P>Но для чего она нужна в С++? Решение каких задач она сделает возможным (или проще)?


позволяет просто сделать сериализацию, rpc, o/r mapping, диагностику ( например красивые стектрейсы ), рантайм type-traits.
Re: Для чего нужна рефлексия в С++?
От: push  
Дата: 27.01.17 12:33
Оценка:
Спасибо всем!
Кажется нашёл несколько областей, где рефлексия получила бы преимущество перед существующими библиотеками (например как boost::HANA):

  1. работа с С++ из скрипта напрямую
  2. красивая диагностика
  3. можно будет отказаться от внешних генераторов/внешнего разбора кода. Но с оговоркой — тут надо смотреть как в итоге рефлексия будет реализована.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.