我有一个名为add_vector_to_scalar
的函数,它将一个标量值添加到向量(in
)并将结果存储在另一个向量(out
)中。我正在学习C ++,所以我不确定如何将类型参数设为add_op generic
?我考虑添加另一个类型名T
,但它不起作用。
template<typename Vector>
void add(Vector& in, Vector& out, T& c) {
transform(in.begin(), in.end(), out.begin(), add_op<int>(c));
}
矢量可以是两种类型:
device_vector<T>
host_vector<T>
add_op
结构如下所示:
template<typename T>
struct add_op : public thrust::unary_function<T,T> {
const T c;
add_op(T v) : c(v) {}
__host__ __device__
T operator()(const T x) {
return x + c;
}
};
答案 0 :(得分:3)
只需T
另一个模板参数add_vector_to_scalar
:
template<typename Vector, typename Scalar>
void add(const Vector& in, Vector& out, const Scalar& c) {
transform(in.begin(), in.end(), out.begin(), add_op<Scalar>(c));
}
请注意,我将in
和c
参数更改为const &
- 因为它们是仅输入参数,您不希望(能够)在函数内修改它们。将它们作为const &
允许传递临时值,这对于非const引用是不可能的。