多个实例重载函数具有C链接

More than one instance overloaded function has C linkage

本文关键字:链接 函数 实例 重载      更新时间:2023-10-16

根据CUDA示例中关于C++集成的示例代码,我正在.cu文件中编写调用CUDA代码的包装函数。

在那个文件中,我有一个函数,它初始化CUDA上下文,分配全局内存,并将一些数据放入常量内存中。

extern "C" void initEngine(int *d_data, int *d_coefA, int *d_coefB)
{
   //Allocations
   //Copy to constant memory
}

现在我想做的是重载initEngine函数以接收更多的参数,但我认为没有办法重载该函数,因为它有C链接,对吗?

extern "C" void initEngine(int *d_data, int *d_coefA, int *d_coefB, int *d_coefC, 
                           int *d_random)
{
   //Allocations
   //Copy to constant memory
}

你能给我一些建议,让我只使用一个initEngine函数吗?或者是不可能的,我必须有两个函数,或者可能只有一个函数和所有参数,只传递NULL引用或类似的东西。

是的,重载是C++的一个特性。

如果您希望具有可从其他模块调用的重载函数,请始终使用C++(即,不要使用extern "C",并将所有文件保留为.cpp或.cu)。

如果你不想这么做,你可以尝试使用宏或其他魔法。