如何在传入std::vformat前变换可变参数中的特定类型
问题:在std::vformat前转换可变参数中的特定类型值
我需要在把可变参数传入std::vformat()之前,转换其中特定类型的值(比如给所有字符串类的值追加"abc"),但始终无法实现:
- 尝试获取格式化参数时,
std::format_args::get()返回的是const值,没法修改内容 - 试过解包可变参数、转换值后重新打包给
std::vformat()用,没成功 - 还尝试重载基础类型的
formatter,但最终没生效
以下是我尝试的代码:
#include <format> #include <string> #include <iostream> template <typename T> inline void transform(T& valeur) {} inline void transform(std::string& valeur) { valeur.append("abc"); } inline void transformArgs() {} template <typename T, typename... Args> void transformArgs(T& t, Args&&... args) { transform(t); transformArgs(args...); } template <typename... Args> std::string prepare(std::string requete, Args&&... args) { // 想要在使用vformat前给所有类字符串值追加"abc" 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); // 无法对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 << result.c_str(); /* 期望输出: 5 - litteral stringabc - bananaabc - litteraly a stringabc */ }
我期望的输出是:
5 - litteral stringabc - bananaabc - litteraly a stringabc
内容的提问来源于stack exchange,提问作者Jahrenski
相关产品推荐
相关产品推荐

