строки есть метод arg, а в нем как в питоне можно задавать имена аргументов "SOME String ard %name, %soname".arg(....) или может быть есть вариант, а то циферное обочзначение %1 крайне не удобна?
Нет такого метода.
Есть boost::format всегда.
You can pass named arguments with fmt::arg: fmt::print("Hello, {name}! The answer is {number}. Goodbye, {name}.", fmt::arg("name", "World"), fmt::arg("number", 42)); https://fmt.dev/latest/index.html
Эх, было бы классно, если можно было user defined literal'ы делать так: {"Key", "Val"}_arg
If your compiler supports C++11 user-defined literals, the suffix _a offers an alternative, slightly terser syntax for named arguments: using namespace fmt::literals; fmt::print("Hello, {name}! The answer is {number}. Goodbye, {name}.", "name"_a="World", "number"_a=42);
Ещё лучше было бы просто: const std::string name = "World"; const int number = 42; print(f"Hello, {name}! The answer is {number}. Goodbye, {name}."); Надеюсь, доживу.
И чтобы захватывала весь контекст?
Нет нигде захвата - имена разрешаются как с обычными переменными
Будет рефлексия, будет и интерполяция строк.
Дак для этого рефлексия не нужна
От литералов имён переменных к самим переменным без рефлексии не перейдёшь.
Этот переход не нужен
f"Hello, {name}" -> std::format("Hello, {}", name); Где тут рефлексия нужна?
Ты думаешь это на макросах можно сделать?
Почему на макросах? Пусть компилятор при виде f сам это делает
А, как фича языка отдельная. Не думаю, что с этим будут заморачиваться.
в питоне и C# заморочились - в С++ тоже можно
Это потребует завязки языка на стандартную библиотеку, а в С++ этого не любят.
Уже есть такая завязка, лично мне на это пох. Для любителей кастомизации можно придумать костыли, конечно
почему?
Обсуждают сегодня