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

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

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

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

X>я не понял одного: как имея строку, в компайл-тайме сгенерить переменную с именем, содержащимся в строке?


Через std::reification. Это несуществующая пока фича. Ты пишешь std::reification<'f', 'o', 'o'>, а компилятор тебе даёт:
template<>
struct reification<'f', 'o', 'o'>
{
    template <typename T>
    struct field
    {
        T foo;
    };
    // ...
};
Это в том позволит из твоего определения:
using table = table_t<
   field_t<"id"_S, int>
  ,field_t<"name"_S, std::string>
>;
Получить синтаксис аналогичный sqlpp11 (то есть через точку result_row.name), без всяких макросов.

Реализовать достаточно просто.
Сейчас это можно сэмулировать разбирая сообщения об ошибках внешним скриптом.
Re[16]: [proof-of-concept] compile time query language
Здравствуйте, niXman, Вы писали:

X>я не понял одного: как имея строку, в компайл-тайме сгенерить переменную с именем, содержащимся в строке?


Через std::reification. Это несуществующая пока фича. Ты пишешь std::reification<'f', 'o', 'o'>, а компилятор тебе даёт:
template<>
struct reification<'f', 'o', 'o'>
{
    template <typename T>
    struct field
    {
        T foo;
    };
    // ...
};
Это в том числе позволит из твоего определения:
using table = table_t<
   field_t<"id"_S, int>
  ,field_t<"name"_S, std::string>
>;
Получить синтаксис аналогичный sqlpp11 (то есть "через точку" result_row.name), без всяких макросов.

Реализовать в компиляторе должно быть достаточно просто.
Сейчас это можно сэмулировать разбирая сообщения об ошибках внешним скриптом.