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

如何不使用辅助函数打印带空格分隔的非类型模板参数包?

可行实现方案

C++17及以上标准可以直接用逗号折叠表达式实现,无需额外辅助函数,提供两种常用写法:

写法1:极简实现(允许末尾带多余空格)

template <int ... N> 
struct X
{
    static void Check() { 
        ((std::cout << N << ' '), ...);
        std::cout << std::endl;
    }   
};

调用X<1,2>::Check()会输出1 2 ,末尾多一个空格,适合对末尾格式无严格要求的场景。

写法2:无多余空格的标准实现

template <int ... N> 
struct X
{
    static void Check() { 
        // 处理空参数包场景,不需要可以删除该判断
        if constexpr (sizeof...(N) == 0) {
            std::cout << std::endl;
            return;
        }
        bool first = true;
        // 仅在非首元素前插入空格
        ((first ? (first = false, std::cout << N) : (std::cout << ' ' << N)), ...);
        std::cout << std::endl;
    }   
};

调用X<1,2>::Check()会输出标准的1 2,元素间带空格、无首尾多余空格。

实现原理

以上写法利用了C++17的一元左折叠规则配合逗号运算符,会按参数包的顺序依次执行每个参数对应的输出表达式,无需额外定义辅助函数、也没有额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:04