Здравствуйте, 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 файл. При повторной компиляции ошибок уже не будет.