Хорошая статья на английском, "Behind the magic of magic_enum", которая объясняет принципы работы библиотеки magic_enum (у которой, мать-мать-мать, 3.4K звезд на GitHub-е).
Статья-то хорошая, но она как раз иллюстрирует то, за что я не люблю C++ (и как язык, и как экосистему, и как коммьюнити). А именно:
Вместо того, чтобы добавить нужную фичу непосредственно в язык люди пытаются эмулировать ее кривыми и убогими велосипедами из говна и палок.
И, что самое страшное, это и вызывает восхищение, и находит применение.
Нечто подобное уже было в прошлом, когда в Boost включили Boost.Lambda, эмулировавшую лямбда-функции для C++98. Убогая, страшная как черт, требовавшая нехилых познаний в C++ для того, чтобы разобраться в деталях ее реализации, тормозившая компиляцию и провоцировавшая internal compiler errors... Но использовавшаяся!
И вот этого я не понимал ни тогда, ни сейчас.
Ну нет в языке фичи X. Смиритесь и обходитесь без нее. Да, придется больше написать ручками. Но зато это будет работать вне зависимости от компилятора и понятно будет даже начинающему C++нику (или деду вроде меня, который уже мало чего помнит).
Но нет, давайте налепим известную субстанцию на палочку, обзовем это конфеткой и будем жрать причмокивая.
3 комментария:
А ещё есть всякие Q_ENUM, Z_ENUM, Z_ENUM_NS и т.д. И этим пользуются. Это факт.
@Dmitry Igrishin
Тем и печальнее, что проблема давным-давно назревшая, но почему-то не решаемая никак. Разве что обещаниями что когда-нибудь вместе с рефлексией.
Между тем переусложненную систему модулей в язык добавили (тем самым создав в C++ ситуацию, отчасти напоминающую Python2 vs Python3). Хотя C++ мог бы и еще 20 лет без модулей прожить.
@eao197
Согласен. Просто нужно учитывать, что стандартизация и введение новшеств куда бы то ни было - это часть большого бизнеса.
Отправить комментарий