template <typename T, std::size_t N>
void gpu_load(T (&data)[N])
{
cudaMalloc((void**)data, N*sizeof(T));
}
我这样称呼它:
float data[2];
gpu_load(data);
但这是行不通的。我想一定是&和点的东西...
最佳答案
您不能只将指针转换为指针。数据的类型为T*
,但是cudaMalloc需要一个void **
。
尝试这个:
cudaMalloc(static_cast<void**>(&d), N*sizeof(T));
注意新的“&”号。
编辑:按照注释中的建议添加了静态演员表。
关于c++ - cudaMalloc不适用于模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20436085/