как type loopholes вообще в принципе, если кто-то вдруг? Я знаю о них теоретически, но хм.
для сохранения стейта в компайлтайме? Шаблоны имеют много ограничений, а лупхолы позволяют их обойти. И у нас компайлтайм возможностей становится больше. Разве это плохо?
Можно чуть более конкретных примеров?
Писать такой код и поддерживать не очень приятно. Учитывая, что довольно небольшое количество программистов может сходу понять, как это всё работает
Например, Boost.PFR до C++17 использовал их. И, судя по последнему диалогу, они всё ещё могут оказаться в нём полезны. В каком-нибудь callback connector можно теги считать автоматически в рамках TU до C++20, пока у нас не было decltype([]{}): auto hello = "Hello, "; auto world= "World!"; auto f1 = obtain_connector<counter()>([hello](){ std::cout << str << std::endl;}); auto f2 = obtain_connector<counter()>([world](){ std::cout << world << std::endl;});
Возможно, человечество что-то делает не так.
На самом деле, этот код, как и любой другой прекрасно скрывается за абстракциями. У него ряд других проблем
так это ж что-то явно библиотечное. А библиотека на то и библиотека, что её не пишет рядовой программист. Рядовой программист её подрубает, и ему знать не нужно, какая магия там отрабатывает
имеет то, что имеем. Альтернатив толком нет
пока не увидет трейс раскрытия шаблонов 🤩
Работал в нашей конторе один товарищ, на шарпе писал. Рефлексию очень любил... Вот рефлексию любил он, а страдаю я.
А вот ещё один действительно интересный пример
А почему в C++17 отказались?
но согласись вместо этого лучше рефлексия и какой то специальный unique_type. Хотя прикол с типом лямбды тоже норм работает.
Там, вроде, со structured binding информацию о полях агрегата можно вытащить без хранения глобального состояния на лупхолах. Но пример выше демонстрирует, что это решение иногда ломается
Никто с этим и не спорил, конечно же
Очень интересно. Auto на корутинах. Вау =) Я пока не вполне понял где там эта техника, видимо надо изучить приложенный gist.
Там реализация завязывается на библиотеку unconstexpr, которая, собственно, и реализована вокруг лупхолов
на лупхолах тоже не работает. Я не очень понимаю как оно в pfr устроено внутри, мне нужны сами типы, а там апи такой что выдаёт только ссылки через get судя по всему
это compile-time рефлексия. В C# она run-time, со всеми вытекающими
у меня нет, но можете посмотреть творчество Антона Полухина https://www.boost.org/doc/libs/master/doc/html/boost_pfr.html
Есть ли существенная разница...
конечно, есть. Баг в рантайме и баг в компайлтайме - это разные вещи
надо через detail лезть судя по всему во внутрь
Дело не в багах, а в запутанности архитектуры.
https://t.me/ProCxx/477009
... ну оке...
у Паши Крюкова на ближайшем C++Russia будет как раз практический пример, когда он type loophole применял для безболезненного переключения AoS/ SoA https://cppconf.ru/talks/interchangeable-aos-and-soa-containers/
Плохо, потому что это могут пофиксить в любой момент
что угодно могут "пофиксить" в любой момент
только проблема в том, что type loophole это дыра в стандарте, а не запланированное поведение
начнём с того, что нас не особо волнует, что там в стандарте, нам лишь важно, чтобы реализации могли в лупхолы далее, в стандарте много таких незапланированных дыр, и ничего, многие до сих пор живы. Просто потому, что их уже не выпилить просто так. Этот "баг" уже 7 лет фиксят, никак не нафиксят. Это хорошо, значит, статической рефлексии быть
Нет, нормальные фичи стараются не ломать
лупхолы с 2015 пытаются закрыть
>> что нас не особо волнует, что там в стандарте, нам лишь важно, чтобы реализации могли в лупхолы А потом у нас прод падает
лупхолы - это хорошая фича, однако её норовят сломать. И похрен, что взамен ничего. Живите без статической рефлексии
Как раз стат. рефлексию планируют добавить, ало
лупхолы это таки костыль, а не хорошая фича. Точно так же как enable_if это костыль
ну вот когда добавят - тогда посмотрим. А пока - руки прочь
на безрыбье и рак - рыба
Обсуждают сегодня