如何从可变参数模板函数的参数创建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
相关产品推荐
相关产品推荐

