Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 12.04.25 21:05
Оценка: 4 (1) :)
Здравствуйте!

В форум "Исходники" не пощу, потому что интересно получить пинков именно по моему "C++"

Надо же как-то расти

Да ну и просто в профильном очень мало постов, по сравнению с политиками

Ну и по доке тоже пинки приветствуются

Библиотека предназначена для встройки в кастомную динамику, поэтому я не задрачивался на всякие новые фишки плюсов — constexpr/constinit/consteval

Одна из базовых фич — совмещение форматной строки С++20 std::format и форматных строк питона — можно использовать без модификации и то и другое.

Но либу можно и из плюсиков нативно использовать, передавая аргументы через std::initializer_list{...}

Возможности библиотеки

  1. Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт).
  2. Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`.
  3. Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов.
  4. Поддержка передачи аргументов через std::initializer_list для непосредственного использования из C++.
  5. Упор на использование библиотеки в своих скриптовых языках/DSL языках.
  6. Поддержка Unicode в кодировке UTF-8.
  7. Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal.
  8. Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string.
  9. Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных.

Собственно, форматирование по всем правилам форматной строки пока не реализовано, оно будет делаться по мере необходимости, и после того, как я решу, как быть с некоторыми проблемами — например, как быть, если спецификатор типа в форматной строке никак не соответствует фактическому параметру.

Пока всё обрабатывается без ошибок через вставку текста при помощи обёрток над std::to_string.

В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format
Маньяк Робокряк колесит по городу
Отредактировано 12.04.2025 21:18 Marty . Предыдущая версия . Еще …
Отредактировано 12.04.2025 21:11 Marty . Предыдущая версия .
Отредактировано 12.04.2025 21:10 Marty . Предыдущая версия .
Отредактировано 12.04.2025 21:07 Marty . Предыдущая версия .
Re: Блин, обидно
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.04.25 18:43
Оценка: :))
Здравствуйте, Marty, Вы писали:

Шамжа шлак приносит, а дискуссии несколько экранов занимают.

Я хоть какую-то годноту принёс на попороть, никто не отвечает.

Чо, реально мой код настолько идеален? Тут
Автор: pilgrim_
Дата: 14.04 15:31
говорят, что говнеца у меня тоже хватает
Маньяк Робокряк колесит по городу
Re: Библиотека форматирования marty::format
От: kov_serg Россия  
Дата: 14.04.25 19:30
Оценка:
Здравствуйте, Marty, Вы писали:

M>Библиотека предназначена для встройки в кастомную динамику, поэтому я не задрачивался на всякие новые фишки плюсов — constexpr/constinit/consteval

M>Одна из базовых фич — совмещение форматной строки С++20 std::format и форматных строк питона — можно использовать без модификации и то и другое.
M>Но либу можно и из плюсиков нативно использовать, передавая аргументы через std::initializer_list{...}

M>Возможности библиотеки

Обычно инструмент, должен решать какие-то задачи или устранять рутину, а вот уже возможности вытикают из имеющихся ограничений.

M> * Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт).

То есть c++17 это минимальное требование.
M> * Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`.
M> * Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов.
Это здорово
M> * Поддержка передачи аргументов через std::initializer_list для непосредственного использования из C++.
M> * Упор на использование библиотеки в своих скриптовых языках/DSL языках.
В скриптовых языках есть более удобное форматирование например https://jinja.palletsprojects.com/en/stable/templates/ https://docs.phalcon.io/4.2/volt
M> * Поддержка Unicode в кодировке UTF-8.
А как вы ширину utf8 строки считаете для выравнивания текста?
M> * Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal.
Серьёзно по основанию 10? Это чисто для бухгалтерии тольео такое надо.
M> * Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string.
А отключить тесты можно?

M> * Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных.

А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.

M>Собственно, форматирование по всем правилам форматной строки пока не реализовано, оно будет делаться по мере необходимости, и после того, как я решу, как быть с некоторыми проблемами — например, как быть, если спецификатор типа в форматной строке никак не соответствует фактическому параметру.

M>Пока всё обрабатывается без ошибок через вставку текста при помощи обёрток над std::to_string.

M>Шамжа шлак приносит, а дискуссии несколько экранов занимают.

Так вы не правильно вопросы задаёте.
Надо не вот, зацените, какие замечания. Что требует установить, собрат, прогнать тестовые сценарии, осмотреться и ещё кучу действий. Мало лишь кто способен просто так колупаться в чужом коде, более требующее длительного погружения, без везких причин.
Вы бы начали с примеров, как всё красиво и компактно и вот если сделать так то будет счастье, и ссылку на счастье.
Шамжа приносить темы обсуждение котрыех не требует больших усилий, иногда и смысла там тоже не много. Зато он их наваливает, как-будто ему за это платят
Re[2]: Блин, обидно
От: T4r4sB Россия  
Дата: 14.04.25 19:46
Оценка:
Здравствуйте, Marty, Вы писали:

M>Я хоть какую-то годноту принёс на попороть, никто не отвечает.


Посмотрел примеры использования, не нашёл
 formatMessage("{} + {} = {}", 2, 2, 4)


в лучшем случае

 formatMessage("{} + {} = {}", {2, 2, 4})


прикрути воредики, несложно ж должно быть.

Ну разбивает строку по плейсхолдерам, есть именованные плейсхолдеры, что неплохо.
Можно ли докопаться что возвращается стринг аллоцирующий память, а не структура из ссылок на подстроки? Да пофиг, это никогда не даст заметного влияния на скорость в реальной программе.
По коду не знаю, что сказать, некоторые приколы только в процессе использования проявляются.
Реальные косяки тут не определить. У меня бывало что при определении вывода для кастомного типа в шаблонах что-то ехало не туда и в дебаге программа падала, потому что долго объяснять, я пол-дня убил чтоб понять.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[2]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.04.25 19:58
Оценка: :)
Здравствуйте, kov_serg, Вы писали:

Спасибо за отзыв


M>>Возможности библиотеки

_>Обычно инструмент, должен решать какие-то задачи или устранять рутину, а вот уже возможности вытикают из имеющихся ограничений.

Я решал проблему встройки форматирования в мой очередной изобретаемый DSL


M>> * Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт).

_>То есть c++17 это минимальное требование.

Да, 17ый стандарт есть уже практически везде, чего пока не сказать о C++20


M>> * Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`.

M>> * Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов.
_>Это здорово

Спасибо


M>> * Поддержка передачи аргументов через std::initializer_list для непосредственного использования из C++.

M>> * Упор на использование библиотеки в своих скриптовых языках/DSL языках.
_>В скриптовых языках есть более удобное форматирование например https://jinja.palletsprojects.com/en/stable/templates/ https://docs.phalcon.io/4.2/volt

А можно носом ткнуть? Джинджа вроде же питоновская либа, форматирование там питоновское. По крайней мере, то, что по ссылке, выглядит питоновским


M>> * Поддержка Unicode в кодировке UTF-8.

_>А как вы ширину utf8 строки считаете для выравнивания текста?

Пока костыльно, есть список пробелов нулевой ширины и диапазоны диакретиков, на 95% случаев должно хватит. Если приспичит, буду думать, как присунуть поддержку i18n или как оно там


M>> * Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal.

_>Серьёзно по основанию 10? Это чисто для бухгалтерии тольео такое надо.

Да. Именно для бухгалтерии и делалось, а точнее — для экспериментов с торговлей на бирже


M>> * Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string.

_>А отключить тесты можно?

Да, наверное можно. Я пока проблем не огрёб с этой либой, но полагаю, они могли появиться после того, как я "опакетил" эту либу под CMake. Спасибо за подсказку


M>> * Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных.

_>А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.

Пока нет. Если накинешь ссылку на спецификацию этих фильтров, я подумаю, можно ли


_>Надо не вот, зацените, какие замечания. Что требует установить, собрат, прогнать тестовые сценарии, осмотреться и ещё кучу действий. Мало лишь кто способен просто так колупаться в чужом коде, более требующее длительного погружения, без везких причин.

_>Вы бы начали с примеров, как всё красиво и компактно и вот если сделать так то будет счастье, и ссылку на счастье.

Ну, в доке там примеры есть
Наверное, надо было их скопировать для затравки


_>Шамжа приносить темы обсуждение котрыех не требует больших усилий, иногда и смысла там тоже не много. Зато он их наваливает, как-будто ему за это платят


Это да. А мне хочетелось бы нормальной порки, чтобы расти как разработчику, что требует некоторого погружения от читателей. Думал, что либа форматирования — годный повод для такого
Маньяк Робокряк колесит по городу
Re[3]: Блин, обидно
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.04.25 20:30
Оценка: :)
Здравствуйте, T4r4sB, Вы писали:

M>>Я хоть какую-то годноту принёс на попороть, никто не отвечает.


TB>Посмотрел примеры использования, не нашёл

TB>
TB> formatMessage("{} + {} = {}", 2, 2, 4) 
TB>


Этого нет пока, да


TB>в лучшем случае


TB>
TB> formatMessage("{} + {} = {}", {2, 2, 4})
TB>


Хм, разве пример "Используем std::initializer_list<marty::format::FormatArgumentVariant>" не об этом?


TB>прикрути воредики, несложно ж должно быть.


Я на полпути, как раз решил собрать критику, чтобы в конце не узнать, что я где-то кардинально обосрался в начале пути, и далеко не всё реализовано.

И да, может, есть какой-то идиоматический приём, который позволяет малой кровью собрать вариадик параметры в initializer_list?


TB>Ну разбивает строку по плейсхолдерам, есть именованные плейсхолдеры, что неплохо.


Спс


TB>Можно ли докопаться что возвращается стринг аллоцирующий память, а не структура из ссылок на подстроки? Да пофиг, это никогда не даст заметного влияния на скорость в реальной программе.


Можно. Но у меня возвращается не std::string, а typename StringType, и именно потому, что я работаю эмбеде в тч, и тут местами зоопарки строк, многие из которых хранят строку непосредственно в своём теле. И саму либу форматирования я старался дизайнить с учётом подобных строк, но местами мог профукатся, плюс зависимые либы, которые я делал без оглядки на эмбед — я об этом написал, это уже вопрос полировки, когда основной функционал будет реализован.


TB>По коду не знаю, что сказать, некоторые приколы только в процессе использования проявляются.


Ну, в соседнем топике коллеги нашли косяк в моей реализации is_bool, просто проглядев по диагонали мой код.


TB>Реальные косяки тут не определить. У меня бывало что при определении вывода для кастомного типа в шаблонах что-то ехало не туда и в дебаге программа падала, потому что долго объяснять, я пол-дня убил чтоб понять.


Спасибо, что потратил время на посмотреть мою либу
Маньяк Робокряк колесит по городу
Re[2]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.04.25 20:50
Оценка: :)
Здравствуйте, kov_serg, Вы писали:

_>А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.


Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля.

Я открыт к обсуждению, для того и запилил топик.

Мне подобное не требовалось. Я пока насовал только то, что нужно было мне

И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать
Маньяк Робокряк колесит по городу
Отредактировано 14.04.2025 20:52 Marty . Предыдущая версия .
Re[4]: Блин, обидно
От: T4r4sB Россия  
Дата: 14.04.25 21:07
Оценка:
Здравствуйте, Marty, Вы писали:


M>И да, может, есть какой-то идиоматический приём, который позволяет малой кровью собрать вариадик параметры в initializer_list?


Не знаю, это?
template <typename Arg, typename... Args>
void foo(Arg&& arg, Args&&... args) {
    auto list = { std::forward<Arg>(args)...};
}

правда боюсь что std::string он полностью скопирует внутрь
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: Библиотека форматирования marty::format
От: kov_serg Россия  
Дата: 15.04.25 06:48
Оценка:
Здравствуйте, Marty, Вы писали:


M>Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля.

Всё очень просто функция расчета ширины должна быть параметром, что бы её можно было поменять.
Для форматирования таблиц и выравнивания текста, очень полезно, т.к. unicode сложный и могут быть сюрпризы, и иногда надо не utf8.
M>Я открыт к обсуждению, для того и запилил топик.

M>Мне подобное не требовалось. Я пока насовал только то, что нужно было мне

M>И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать

Вот пример на lua:
T=template{ name="<a>", u=string.upper, e=xml_encode }
print(T"result={{name|u|e}}")
result=&lt;A&gt;
Re[4]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 09:15
Оценка: :)
Здравствуйте, kov_serg, Вы писали:


M>>Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля.

_>Всё очень просто функция расчета ширины должна быть параметром, что бы её можно было поменять.
_>Для форматирования таблиц и выравнивания текста, очень полезно, т.к. unicode сложный и могут быть сюрпризы, и иногда надо не utf8.

Можно сделать


M>>Мне подобное не требовалось. Я пока насовал только то, что нужно было мне

M>>И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать

_>Вот пример на lua:

_>
_>T=template{ name="<a>", u=string.upper, e=xml_encode }
_>print(T"result={{name|u|e}}")
_>
_>result=&lt;A&gt;
_>


Фильтры отдельными параметрами передавать?

А ширина текста должна высчитываться до фильтров, или после?
Маньяк Робокряк колесит по городу
Re[5]: Библиотека форматирования marty::format
От: kov_serg Россия  
Дата: 15.04.25 09:33
Оценка:
Здравствуйте, Marty, Вы писали:

M>Фильтры отдельными параметрами передавать?

так же как и переменные по имени, это такая же переменная только значение функция

M>А ширина текста должна высчитываться до фильтров, или после?

это может быть параметром фильтра
T=template{ a1=align_text{ type="right", width=80, text_width=get_html_text_width } }
Re: Библиотека форматирования marty::format
От: Igore Россия  
Дата: 15.04.25 11:22
Оценка: 8 (1)
Здравствуйте, Marty, Вы писали:

M>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format

Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.

По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать
cout << formatMessage(
    "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159)
);
Re[2]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 11:32
Оценка:
Здравствуйте, Igore, Вы писали:

M>>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format

I>Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.

Есть такое, потом почищу, если руки дотянуться


I>По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать

I>
I>cout << formatMessage(
I>    "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159)
I>);
I>


Не понял, а что за ms

Не раскроешь мысль, а то не понятно
Маньяк Робокряк колесит по городу
Re[3]: Библиотека форматирования marty::format
От: kov_serg Россия  
Дата: 15.04.25 12:04
Оценка: 14 (2) +1
Здравствуйте, Marty, Вы писали:

M>Не понял, а что за ms

M>Не раскроешь мысль, а то не понятно
Видимо он имел ввиду такое:
// https://en.cppreference.com/w/cpp/language/user_literal
#include <string>
using std::string;

struct A {
    const char* text; size_t size;
    A& var(const char* name,...) { return *this; }
    operator string() { return "result"; }
};

A operator ""_f(const char* text, size_t size) { return A{text,size}; }

int main(int argc, char **argv) {
    string res=R"(
+----+---+
| 12 | 3 |
+----+---+
)"_f.var("a",12).var("b",3.14);
    return 0;
}
Re[3]: Библиотека форматирования marty::format
От: Igore Россия  
Дата: 15.04.25 12:18
Оценка: 8 (1)
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Igore, Вы писали:


M>>>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format

I>>Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.

M>Есть такое, потом почищу, если руки дотянуться



I>>По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать

I>>
I>>cout << formatMessage(
I>>    "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159)
I>>);
I>>


M>Не понял, а что за ms

Сокращение MartyString
M>Не раскроешь мысль, а то не понятно
kov_serg правильно понял, я о user_literal, можно свои определять, чтобы меньше кода писать.
Как пример

Когда написал понял, что если будет отдельный класс где будет и строка форматирования и аргументы, то можно дополнительно переопределить вывод этого класс в поток и тогда убрать formatMessage в явном видет, оставить только
cout << "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159);
Re[4]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 12:24
Оценка:
Здравствуйте, Igore, Вы писали:

M>>Не понял, а что за ms

I>Сокращение MartyString



Тогда наверное — mf — MartyFormat


I>Когда написал понял, что если будет отдельный класс где будет и строка форматирования и аргументы, то можно дополнительно переопределить вывод этого класс в поток и тогда убрать formatMessage в явном видет, оставить только

I>
I>cout << "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159);
I>


Да, так покороче получается. Надо подумать
Маньяк Робокряк колесит по городу
Re[5]: Библиотека форматирования marty::format
От: Igore Россия  
Дата: 15.04.25 13:01
Оценка:
Здравствуйте, Marty, Вы писали:

M>Да, так покороче получается. Надо подумать

Еще было бы неплохо какой-нибудь fwd.h где будут типы используемые, чтобы только его включать и там свои сокращения добавить
using FormatArguments = std::vector< std::pair<std::string, FormatArgumentVariant> >;


чтобы не писать длинно "std::vector< std::pair<std::string," в примерах.
Re[6]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 13:05
Оценка:
Здравствуйте, Igore, Вы писали:

I>Еще было бы неплохо какой-нибудь fwd.h где будут типы используемые, чтобы только его включать и там свои сокращения добавить

I>
I>using FormatArguments = std::vector< std::pair<std::string, FormatArgumentVariant> >;
I>


I>чтобы не писать длинно "std::vector< std::pair<std::string," в примерах.


Ну, так-то для аргументов уже есть тип Args, плодить ещё разные StdVectorOfPairsArgs — имхо так себе идея, и это замыливает то, что можно использовать стандартные контейнеры, как раз то, что я в примерах хотел показать
Маньяк Робокряк колесит по городу
Re[2]: Блин, обидно
От: rg45 СССР  
Дата: 15.04.25 13:53
Оценка: :))
Здравствуйте, Marty, Вы писали:

M>Шамжа шлак приносит, а дискуссии несколько экранов занимают.

M>Я хоть какую-то годноту принёс на попороть, никто не отвечает.

Не в огорчение будет сказано. Во-первых, у тебя много кода, это ж вникать нужно. Во-вторых, С++17. Ну и в-третьих, ты не такой забавный, как Shmj.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 16:58
Оценка:
Здравствуйте, Igore, Вы писали:

По поводу литералов такой вопрос (который у меня также и по поводу использования стандартных литералов)

Вот я в функции хочу вывести отформатированную строку:

cout << "Pi: {Pi:f}\n"ms.arg("Pi", 3.14159);


Мне перед этим надо написать
using namespace marty::format::literals;


Больше я в этой функции ничего особо выводить не хочу, при возникновении ошибки просто залогировать её в одном месте.

Итого код будет выглядеть примерно так:
using namespace marty::format::literals;
cout << "Pi: {Pi:f}\n"_mf.arg("Pi", 3.14159);


Разве это так уж сильно короче, чем:
cout << marty::format::formatMessage("Pi: {Pi:f}\n", marty::format::Args().arg("Pi", 3.14159);


А информативность зело падает, не?
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.