[英]Passing auto as a parameter (for pointer to object)
我有一个宏:
#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所以lambdas可以作为一个潜在的解决方法,我可以在https://stackoverflow.com/a/29945034/7283981阅读,但我不熟悉lambdas知道如何做到这一点。 有任何想法吗?
这是模板的完美案例,我不明白你为什么试图避免它:
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 *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.