Что такое "абсолютные"? Чтобы у нас было несколько строк и каждая непременно начиналась с одного или более пробелов? Много таких примеров удастся привести? Я буду впечатлён хотя бы одним примером из реальной кодовой базы В то же время, сейчас форматирование кода ломается у всех из-за сырых литералов. Или не ломается. Тогда ломается содержимое литерала
Ну например можно засунуть в литерал многострочный отформатированный текст для вывода в консоль одним куском
Так в этом и проблема. Сейчас это ломает отступы в коде. Потому что для сохранения исходного форматирования текста, в нём не будет отступов
прикольная штука, никогда раньше не использовал const char *str = "⣿⣿⡟⡹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n" "⣿⣿⢱⣶⣭⡻⢿⠿⣛⣛⣛⠸⣮⡻⣿⣿⡿⢛⣭⣶⣆⢿⣿\n" "⣿⡿⣸⣿⣿⣿⣷⣮⣭⣛⣿⣿⣿⣿⣶⣥⣾⣿⣿⣿⡷⣽⣿\n" "⣿⡏⣾⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣿⣿\n" "⣿⣧⢻⣿⡟⣰⡿⠁⢹⣿⣿⣿⣋⣴⠖⢶⣝⢻⣿⣿⡇⣿⣿\n" "⠩⣥⣿⣿⣴⣿⣇⠀⣸⣿⣿⣿⣿⣷⠀⢰⣿⠇⣿⣭⣼⠍⣿\n" "⣿⡖⣽⣿⣿⣿⣿⣿⣿⣯⣭⣭⣿⣿⣷⣿⣿⣿⣿⣿⡔⣾⣿\n" "⣿⡡⢟⡛⠻⠿⣿⣿⣿⣝⣨⣝⣡⣿⣿⡿⠿⠿⢟⣛⣫⣼⣿\n" "⣿⣿⣿⡷⠝⢿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣾⡩⣼⣿⣿⣿⣿⣿\n" "⣿⣿⣯⡔⢛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣍⣨⠿⢿⣿⣿⣿\n" "⣿⡿⢫⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣝⣿\n"; cout << str;
Я прекрасно понимаю и разделяю вашу боль. Тем не менее я могу себе представить контрпример: тот же yaml может собираться по кускам. В таком случае кусок, который вставляется куда-то в середину файла может потребовать постоянного смещения для всех элементов.
Справедливое замечание, хотя и думаю, что это более редкий пример. Может, нам просто нужен ещё один тип сырых сертификатов?
Если этим заниматься, наверное правильно было бы разделить различные свойства литералов: 1) однострочные / многострочные 2) обработка эскейп последовательностей 3) сохранение отступов (только для многострочных) 4) format-strings (?) 5) encoding (byte-strings (?) и юникоды всех цветов) На первый взгляд текущая реализация R"()" не позволяет разделить многострочность и обработку эскейпов, но возможно была выбрана заглавная буква как раз чтобы иметь возможность позже добавить однострочный r"". К сожалению, этот подход не получится обобщить из-за L"" и U"". Ну и очевидно, что нужно проанализировать как это реализовано в других языках. Python очевидный кандидат. Игнат выше упоминал stripIndent из джавы. Я не могу сказать где еще делают что-то интересное со строковыми литерами.
Я сейчас не очень слежу за развитием компайлтайм вычислений, но не получится решить задачу удаления отступов с помощью обычной consteval функции? upd: В прочем, вряд ли: плюсы же не позволяют возвращать массивы по значению.
а ещё можно иметь в языке CTFE и написать constexpr/consteval функцию питоновской textwrap.dedent и не мучить грамматику языка 50 видами строковых литералов
Думаю, что попробовать что-то с strip_ident<R"(...)"> и возвратом указателя/вью сделать, но всё же, больше хотелось бы иметь красивое решение на уровне языка
то есть ты бы хотел ещё сильнее раздуть синтаксис с++ 🌚 А ты хорош
ИМХО красивые (вот именно прям красивые) решения на уровне языка обычно решают/упрощают больше чем ровно одну проблему например deducing this
А вы предлагаете оставить самостоятельно висеть в языке просто сломанную (с точки зрения практического использования) фичу? Да и грамматика же не усложняется – добавляется разве что ещё один префикс для строки. А содержимое такого литерала – уже не грамматика
Смысл плюсов не в том что бы дать тебе красивые инструменты на уровне языка. Смысл в том что бы дать тебе инструменты на уровне языка при помощи которых ты можешь построить красивые инструменты
Проблема-то в том, что уже существующая фича сломана изначально
да, я бы ещё добавил, если такого нет, параметр компиляции -NOCSTYLE, который отключит все си штуки, которые дублируются стл либо синтаксисом с++
из инструментов уровня языка, способных примениться не более чем ровно в одном юзкейсе, как-то так себе что-то строить: как только хочешь построить что-то новое, выясняется, что под этот юзкейс ещё нет специального инстурмента на уровне языка, чтобы это сделать в итоге имеем парадоксальный язык, в котором одновременно слишком много фич и постоянно каких-то фич нехватает
глупости! R"" делает именно то, что нужно. А про форматирование отступов в литералах - ну честно, это же ведь ну натурально бред! Я не понимаю как народ всерьез столько уже это обсуждает.
Обсуждают сегодня