2014-01-29 98 views
2

我有一个叫add_vector_to_scalar的函数,它向矢量(in)添加一个标量值并将结果存储在另一个矢量(out)中。我正在学习C++,所以我不知道如何将类型参数设置为?我想添加另一个类型名称T,但它没有奏效。嵌套的C++模板

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

你可以发布“添加另一个typename T”哪些不起作用吗? – Angew

回答

3

简单地使Tadd_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)); 
} 

请注意,我将inc参数更改为const & - 因为它们只是输入参数,您不希望(能够)在函数内修改它们。把它们作为const &允许临时传入,这对于非const引用是不可能的。