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

如何从可变参数模板函数的参数创建std::set?

实现约束int类型的可变参数模板函数返回std::set

给定的代码框架通过Int概念约束所有参数必须为int类型,我们可以通过两种简洁的方式实现fun函数,使其返回包含所有传入参数的std::set<int>:

方法一:利用初始化列表直接构造

这是最简洁的实现方式,借助std::set的初始化列表构造函数,直接展开参数包完成集合创建:

template<class T>
concept Int = std::same_as<T, int>;

template<Int... Ints>
std::set<int> fun(Ints... ints)
{
    return {ints...};
}

由于Int概念已经确保所有参数都是int类型,参数包展开后可以直接匹配std::set<int>的初始化列表构造要求,一步完成集合的创建与返回。

方法二:使用折叠表达式逐个插入

如果需要在插入参数前做额外处理,可以用C++17引入的折叠表达式,逐个将参数插入到集合中:

template<class T>
concept Int = std::same_as<T, int>;

template<Int... Ints>
std::set<int> fun(Ints... ints)
{
    std::set<int> result;
    (result.insert(ints), ...); // 折叠表达式遍历所有参数执行插入
    return result;
}

这里的逗号运算符确保每个insert调用都被执行,折叠表达式会自动遍历参数包中的所有元素,完成逐个插入操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:25:31