如何用模板参数包的计算结果填充tuple?
对模板参数计算后生成tuple返回的实现方法
当然可行,问题出在你对折叠表达式和tuple初始化的语法使用上。以下是修正后的代码:
#include <tuple> template <typename TupleT, int ...values> auto create_tuple() { // 直接展开计算后的模板参数,初始化目标tuple return TupleT{ (values + 1)... }; } int main() { auto t = create_tuple<std::tuple<int, int>, 1, 2>(); // 此时t的值为(2,3) }
关键说明:
- 你之前的写法多了多余的逗号,正确的折叠展开语法是
(values + 1)...,它会将每个模板参数values分别加1后,依次作为TupleT构造函数的初始化参数。 - 确保你的编译器开启C17及以上标准(折叠表达式是C17的特性)。
- 如果需要更好的兼容性,也可以通过
std::make_tuple生成临时tuple再转换:return static_cast<TupleT>(std::make_tuple( (values + 1)... ));
内容的提问来源于stack exchange,提问作者Lasersköld
相关产品推荐
相关产品推荐

