You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:48:21