我是新手,所以我可能会遗漏一些东西。我目前有这些代码:
#include <iostream>
template<int ...> struct mySum;
template<>struct
mySum<> {
static const int value = 0;
};
template<int i, int ... tail> struct
mySum<i, tail...> {
static const int value = i + mySum<tail...>::value;
};
int sum = mySum<1, 2, 3, 4, 5, 6, 7, 8>::value;
int main() {
std::cout << sum << std::endl;
return 0;
}
正如您所看到的,我使用递归来将值的总和作为整数。如何修改此代码以接受向量并返回向量?
例如,我想将整个向量乘以2。
<1,2> 1,2,3,4将返回2,4,6,8等...或者有更好的方法递归地执行此操作吗?
编辑:模板内容不是必需的。只有递归。我只是认为可以用模板做到这一点......
答案 0 :(得分:-2)
如果要以递归方式执行此操作,则必须使用函数int sum(...);
(包括&lt; stdarg.h&gt;)。 (它被命名为可变函数)
模板只是避免重写事物的一种方法:在编译期间替换所有模板内容:编译后,模板不再存在。
因为模板是在编译时确定的,所以只能在编译时使用已知的表达式(常量表达式)。 根据定义,矢量不是常数,因此不能在模板中使用。