Сообщение 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"? (пример
Для этого даже есть готовый генератор парсеров — Boost.Metaparse.
Вытащив имена, ты можешь их скормить в std::reification<'f', 'o', 'o'>, где компилятор автоматом сгенерирует специализацию:
А далее, уже из этих специализаций можно слепить итоговую структуру через наследование, как в sqlpp11.
EP>>Можно создать строковый DSL, который на основе текстового кода создаёт конкретные структуры у которых имена полей сгенерированны из этих строк.
X>почему-ьто мне кажется это невозможным... можно пример?
Для этого нужна фича std::reification которую я описал выше.
Ты же можешь обработать строку " struct Test { int foo, double bar }; " во время компиляции и вытащить от туда имена "foo" и "bar"? (пример
Автор: Evgeny.Panasyuk
Дата: 12.10.14
как это сделать)Дата: 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"? (пример
Для этого даже есть готовый генератор парсеров — Boost.Metaparse.
Вытащив имена, ты можешь их скормить в std::reification<'f', 'o', 'o'>, где компилятор автоматом сгенерирует специализацию (в этом и есть мой proposal):
А далее, уже из этих специализаций можно слепить итоговую структуру через наследование, как в sqlpp11.
EP>>Можно создать строковый DSL, который на основе текстового кода создаёт конкретные структуры у которых имена полей сгенерированны из этих строк.
X>почему-ьто мне кажется это невозможным... можно пример?
Для этого нужна фича std::reification которую я описал выше.
Ты же можешь обработать строку " struct Test { int foo, double bar }; " во время компиляции и вытащить от туда имена "foo" и "bar"? (пример
Автор: Evgeny.Panasyuk
Дата: 12.10.14
как это сделать)Дата: 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.