Информация об изменениях

Сообщение Re: Для чего нужна рефлексия в С++? от 24.01.2017 23:06

Изменено 24.01.2017 23:07 Evgeny.Panasyuk

Re: Для чего нужна рефлексия в С++?
Здравствуйте, push, Вы писали:

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


Например автоматическое преобразование структур в нужную форму.
К примеру на входе метапрограммы структура:
struct Widget
{
    int id;
    double value;
};
vector<Widget> widgets;
а на выходе:
struct TransformedWidget
{
    vector<int> [id];
    vector<double> [value];
};
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. При наличии рефлексии/реификации это может происходить полностью в автоматическом режиме.
Re: Для чего нужна рефлексия в С++?
Здравствуйте, 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. При наличии рефлексии/реификации это может происходить полностью в автоматическом режиме.