c++ - cudaMalloc 不适用于模板

标签 c++

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/

相关文章:

c++ - .cpp :23: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’

使用 externalNativeBuild.ndkBuild 编译的 Android native 调试

c++ - 将 void 函数模板专门化为 const char[N]

c++ - boost::interprocess : managed shared memory errors

c++ - 如何通过一组线段找到最大交点数

c++ - 使用 ORM(例如 ODB)时处理类更改

c++ - 调用SDL_CreateTextureFromSurface时SDL崩溃

c++ - 模板(元)编程是否总是只有一种实现方式?

c++ - 用 C++ 创建一个程序来计算所有可能的方程

c++ - 从文件中读取整数 - 逐行