C++TMP如何将运行时数组解析为可变元模板

C++TMP how to parse runtime array to variadic meta-template?

本文关键字:运行时 数组 C++TMP      更新时间:2023-10-16

我已经使我的varadic元模板工作(使用任意数量的int参数)

cout << findBestSum<4,5,6,3,7,20,3,50,1,-1,5>::result << endl; //outputs 103 which is good

现在,我遇到了一个将运行时输入传递到此模板的问题,例如标准的argv(当然,在将其转换为int之后),因为它是一个指针,而指针在编译时计算中不存在。

有没有一种方法可以将输入数组作为单独的参数提取/扩展/解析到模板中?

我当然可以做一些类似的事情

 findBestSum<arr[0],arr[1],arr[2]>::result

如果我知道开销中的参数数量,但我不知道。用户甚至可以输入一百万个数字

p.s.只是提醒,我不能这样做:findBestSum<arr>::result,因为它是一个指针!!编译时没有分配地址

在这种情况下,模板是错误的作业工具,因为在编译时您的数字序列是未知的。

如果您的findBestSum算法搜索包含最大和的最大子数组(即Kadane算法的最大子阵列问题),并且是O(N),则该数组仅在运行时已知,您别无选择,只能在运行时遍历数组的所有元素并执行算法。

根据用户的输入,根据输入值的值范围预先计算输入值的所有可能排列可能是完全不可行的,或者有点是有意义的。这超出了你的问题范围。