Сообщение 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'>, а компилятор тебе даёт:
Реализовать достаточно просто.
Сейчас это можно сэмулировать разбирая сообщения об ошибках внешним скриптом.
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'>, а компилятор тебе даёт:
Реализовать в компиляторе должно быть достаточно просто.
Сейчас это можно сэмулировать разбирая сообщения об ошибках внешним скриптом.
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), без всяких макросов.Реализовать в компиляторе должно быть достаточно просто.
Сейчас это можно сэмулировать разбирая сообщения об ошибках внешним скриптом.