Как преобразовать типы из аргумента с переменным числом аргументов перед отправкой в ​​std::vformatC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Как преобразовать типы из аргумента с переменным числом аргументов перед отправкой в ​​std::vformat

Сообщение Гость »


Я хочу преобразовать значения определенных типов, поступающие из аргумента с переменным числом аргументов, перед отправкой их в std::vformat(), но я не могу найти способ сделать это.
< p>Я пытался получить аргументы формата, но не могу изменить их значение, поскольку std::format_args::get() возвращает константное значение.
Также пытался найти способ распакуйте вариант, преобразуйте значения и переупакуйте их для использования в std::vformat().
Я также пытался переопределить средство форматирования для базовых типов, но в конечном итоге это не используется. .

Код: Выделить всё

#include 
#include 
#include 

template 
inline void transform(T& valeur) {}
inline void transform(std::string& valeur) {
valeur.append("abc");
}

inline void transformArgs() {}
template 
void transformArgs(T& t, Args&&... args) {

transform(t);
transformArgs(args...);
}

template 
std::string prepare(std::string requete, Args&&... args)
{
//I want to add "abc" to any string-like values before using vformat
std::format_args fmtargs = std::make_format_args(args...);

const unsigned int nb = sizeof...(args);
for (unsigned int i = 0; i < nb; ++i) {

auto arg = fmtargs.get(i);
//Can't do anything with arg
}

transformArgs(args...);

try {
return std::vformat(requete, std::make_format_args(args...));
}
catch (...) {}

return "";
}

int main() {

char fixed[] {"banana"};
auto result = prepare("{} - {} - {} - {}", 5, "litteral string", fixed, std::string("litteraly a string"));
std::cout 

Источник: [url]https://stackoverflow.com/questions/78141936/how-can-i-transform-types-from-a-variadic-argument-before-sending-to-stdvforma[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»