C++17 Reflection; std::tuple, boost::hana. Возможности и проблемы?

200
06 июля 2019, 06:40

Всем доброго времени суток. Сабж в заголовке, а вопрос в следующем: С помощью кого из данных сверху господ можно максимально близко приблизиться к рефлексии, или даже реализовать возможность автоматической сериализации юзер типов(которые включают как другие юзер типы, так и базовые)? Заранее спасибо за ответы, советы, рекомендации и ссылки на материал.

Answer 1

Рефлексия в С++ есть только в минимальных количествах и до адекватной сериализации еще как до луны. std::tuple вообще не в тему.

  1. Вариант с псевдорефлексией на макросах реализован в boost.Hana
#include <iostream>
#include <string>
#include <cstdlib>
#include <boost/hana.hpp>
template< typename T >
void serialize(::std::ostream& output, T const & object)
{
    ::boost::hana::for_each
    (
        ::boost::hana::members(object)
    ,   [&](auto const & member)
        {
            output << member << std::endl;
        }
    );
}
struct Person
{
    BOOST_HANA_DEFINE_STRUCT
    (
        Person
    ,  (::std::string, name)
    ,  (int, age)
    );
};
int main()
{
    Person john{"John", 30};
    serialize(std::cout, john);
    return 0;
}

online compiler

  1. Вариант с псевдорефлексией на кодогенерации реализован например в Qt MOC.

  2. Вариант с псевдорефлексией на дефектах стандарта реализован в Loophole.

READ ALSO
Как изменить размер фотографии в px? [закрыт]

Как изменить размер фотографии в px? [закрыт]

Есть Bitmap (фотография) надо сделать его 250px на 250 pxКак это можно сделать?

172
javax.swing не выводится окно

javax.swing не выводится окно

Написал следующий код на javaПрограмма завершается корректно, но при запуске окно не выводится на экран

183
Java - RunTime Error. Не могу понять

Java - RunTime Error. Не могу понять

Решаю задачи на сайте, при отправке сервер выдает Runtime errorПодозреваю, что при чтении данных

167
Для чего нужен метод close в классе InputStream?

Для чего нужен метод close в классе InputStream?

во многих статьях говорится о том, что всегда следует закрывать потоки ввода/вывода, но для чего это следует делать? есть ли какие-то ограничения,...

197