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

如何使用std::print打印C++模板参数包?

用std::print打印模板参数包的实现方案

能否用std::print打印模板参数包?比如下面的代码中,???处不知道该用什么构造来实现打印需求:

void func(auto... args){
    std::print("???", args...);
}

补充说明:func()的其他功能和这个std::print调用无关,期望调用func(a, b, c)时,效果等价于直接调用std::print("{}{}{}", a, b, c)。

可行实现方案(感谢@Passer By)

通过拆分首个参数与剩余参数,结合折叠表达式来实现参数包的打印,同时保证后续参数能正常转发给实际业务逻辑函数:

// 处理参数实际业务逻辑的函数
auto func1(auto&&...args){/*...*/return 0;}

auto func0(auto&& arg, auto&&...args){
    // 打印参数包(此处不使用std::forward,因为后续还要用到参数)
    std::print("{}", "args(");
    std::print("{}", arg);             // 打印第一个参数
    (std::print(", {}", args), ...);   // 用折叠表达式展开打印剩余参数
    std::println(")");
    
    // 将参数转发给实际业务函数
    return func1(std::forward<decltype(arg)>(arg), std::forward<decltype(args)>(args)...);
}

// 调用示例
func0(1); // 输出: args(1)
func0(2, "abc"); // 输出: args(2, abc)

说明:该方案通过分离首个参数避免空参数包的问题,用折叠表达式(std::print(", {}", args), ...)依次打印剩余参数,同时通过std::forward保证参数的值类别(左值/右值)在转发到业务函数时不变。

内容的提问来源于stack exchange,提问作者Solo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:03:17