gpt4 book ai didi

c++ - 将 auto 作为参数传递(用于指向对象的指针)

转载 作者:行者123 更新时间:2023-11-30 02:22:54 27 4
gpt4 key购买 nike

我有一个宏:

#define checkAlloc(ans)  checkPointer((ans), __FILE__, __LINE__); 

用于环绕任何指针分配以检查其是否有效(用于检查 GPU 设备端的内存分配)。

宏的用法如下:

SomeObject* myObj = checkAlloc(new SomeObject());

checkPointer 函数实现为:

inline __device__ SomeObject* checkPointer(SomeObject* pointer, char *file, int line)
{
if (pointer == nullptr)
{
// do error logging
}
return pointer;
}

现在,为我可能分配给的每种类型的对象创建一个新版本的函数是非常不方便的。模板也不是一个选项,因为我希望语法清晰 - 即只输入 checkAlloc(…)围绕每个分配而不是 checkAlloc<SomeObject>(…)这是丑陋的,希望是不必要的。

理想情况下,我想将 checkPointer 更改为:

inline __device__ auto checkPointer(auto pointer, char *file, int line)

但我知道 auto 还不能用于函数参数。 GPU 代码支持 C++14,因此 lambda 可以用作潜在的解决方法,我可以在 https://stackoverflow.com/a/29945034/7283981 阅读但我对 lambda 还不够熟悉,不知道该怎么做。有什么想法吗?

最佳答案

这是模板的完美案例,我不明白你为什么要避免它:

template < typename T >
inline __device__ T* checkPointer(T* pointer, const char *file, int line)
{
if (pointer == nullptr)
{
// do error logging
}

return pointer;
}

这非常清晰干净,您可以像那里有一个 auto 一样使用它:

int main(int argc, char** argv)
{
SomeObject* myObj = checkAlloc(new SomeObject());
}

如您所见,有自动参数推导功能,甚至不需要任何类型规范......

哦,请注意我将 char * file 更改为 const char * file 因为 C++11 不允许将文字转换为 char *

关于c++ - 将 auto 作为参数传递(用于指向对象的指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com