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

Сообщение Re[14]: [proof-of-concept] compile time query language от 11.07.2016 22:11

Изменено 11.07.2016 22:12 Evgeny.Panasyuk

Здравствуйте, niXman, Вы писали:

EP>>Можно создать строковый DSL, который на основе текстового кода создаёт конкретные структуры у которых имена полей сгенерированны из этих строк.

X>почему-ьто мне кажется это невозможным... можно пример?

Для этого нужна фича std::reification которую я описал выше.

Ты же можешь обработать строку " struct Test { int foo, double bar }; " во время компиляции и вытащить от туда имена "foo" и "bar"? (пример
Автор: Evgeny.Panasyuk
Дата: 12.10.14
как это сделать)
Для этого даже есть готовый генератор парсеров — Boost.Metaparse.

Вытащив имена, ты можешь их скормить в std::reification<'f', 'o', 'o'>, где компилятор автоматом сгенерирует специализацию:
template<>
struct reification<'f', 'o', 'o'>
{
    template <typename T>
    struct field
    {
        T foo;
    };
};

А далее, уже из этих специализаций можно слепить итоговую структуру через наследование, как в sqlpp11.
Re[14]: [proof-of-concept] compile time query language
Здравствуйте, niXman, Вы писали:

EP>>Можно создать строковый DSL, который на основе текстового кода создаёт конкретные структуры у которых имена полей сгенерированны из этих строк.

X>почему-ьто мне кажется это невозможным... можно пример?

Для этого нужна фича std::reification которую я описал выше.

Ты же можешь обработать строку " struct Test { int foo, double bar }; " во время компиляции и вытащить от туда имена "foo" и "bar"? (пример
Автор: Evgeny.Panasyuk
Дата: 12.10.14
как это сделать)
Для этого даже есть готовый генератор парсеров — Boost.Metaparse.

Вытащив имена, ты можешь их скормить в std::reification<'f', 'o', 'o'>, где компилятор автоматом сгенерирует специализацию (в этом и есть мой proposal):
template<>
struct reification<'f', 'o', 'o'>
{
    template <typename T>
    struct field
    {
        T foo;
    };
};

А далее, уже из этих специализаций можно слепить итоговую структуру через наследование, как в sqlpp11.