Веб-версияОткрыть в Telegram

Веткамда. не хватило гибкости шаблонов для выражения пользовательского апи и приходится делать костыли. ну костыли рабочие ко…

6 сообщений · –
Ы
мда. не хватило гибкости шаблонов для выражения пользовательского апи и приходится делать костыли. ну костыли рабочие конечно но это костыли
  1. Ы
    в чем суть. есть сканнеры template <> struct scanner<my_type> { static constexpr auto pattern(std::string_view params) { return "pattern"; } template <typename Context> struct state { Context context; }; template <typename Context> static constexpr state<Context> begin(std::string_view params, Context context) { return state{std::move(context)}; } // .. статик методы которые используют контекст }; и есть вызов их struct a { my_type obj1; my_type obj2; }; struct b { a obj; std::string_view str; }; auto result = scan::scan<"{} {}">("patternpattern str").of<b>(); и нужно научить пробрасывать этот контекст в сканнеры. auto result = scan::scan<"{} {}">("patternpattern str").of<b>({{42, "hello world"}, scan::by_default{}}); как видно сканнеры могут быть шаблонные и стейт который там есть тоже. но нужен удобный апи через {} а не мусор. делать такой апи нормально шаблонами не выйдет в целом. его вроде можно сделать руками для конкретного типа (нельзя на самом деле нормально) и типа куда сканируется но обобщить это шаблонами не выйдет - пришлось бы генерировать шаблонные функции шаблонами в типе. так делать нельзя. но решение и путь сделать такой апи есть. благодаря правилу что объект живет до окончания полного выраженияя все что пользователь в of насоздает будет жить до тех пор. это можно сделать и внутри of сделать стирание типа прямо на границе через шаблонные конструкторы. и все операции которые делаются со стейтом будут уже со стертым типом это со стиранием накладывает свои ограничения вроде того что нельзя бранчиться по тому будет ли перегрузка вообще или нет в зависимости от того какой там шаблонным тип (а там в зависимости от того есть ли перегрузка меняется поведение и то какой автомат вообще строится).
    1. Ы
      хотя нет с лупхолами можно
      1. Ы
        читай новое сообщение. надеюсь у меня получилось объяснить
Ppro.std::vector<T>.cxx | векторчайpro.std::vector<T>.cxx | векторчай@stdvector · группа · Технологии
249участников31пишущих за 30 дней
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем