Re[10]: [proof-of-concept] compile time query language
От: Evgeny.Panasyuk Россия  
Дата: 11.07.16 20:09
Оценка:
Здравствуйте, niXman, Вы писали:

EP>>Или ты предлагаешь к полям в проекции по строковым именам обращаться?

X>да. ничего лучше(без кодогенерации) я придумать не смог %)

Это поможет решить следующая фича:
template<char...>
struct reification;

Где компилятор автоматически бы создавал специализации следующего вида при обращении к ним:
template<>
struct reification<'n', 'u', 'm', 'b', 'e', 'r'>
{
    template <typename T>
    struct field
    {
        T number;
    };
    template <typename T>
    static auto &access(T &x)
    {
        return x.number;
    }
    // ... number function, number type, etc, etc
};

Думаю стоит подумать над proposal'ом.

Сейчас кстати это можно сэмулировать следующим образом. Даём пользователю
template<char...>
struct reification;

Когда он обращается к специализации reification<'n', 'u', 'm', 'b', 'e', 'r'>, получаем ошибку компиляции вида
main.cpp:7:47: error: implicit instantiation of undefined template 'reification<'n', 'u', 'm', 'b', 'e', 'r'>'

    reification<'n', 'u', 'm', 'b', 'e', 'r'> x;

Парсим ошибки компиляции простым скриптом и генерируем специализации в специальный .hpp файл. При повторной компиляции ошибок уже не будет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.