我有個宏:傳遞汽車作爲參數(用於指針對象)
#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)
但我明白汽車不能用於函數參數呢。 GPU代碼支持C++ 14,所以lambda可以用作潛在的解決方法,我可以在https://stackoverflow.com/a/29945034/7283981上閱讀,但我不熟悉lambda表達式知道如何執行此操作。有任何想法嗎?
模板函數具有參數推導功能。什麼是「不清楚」?你在這裏似乎沒有什麼誤解。 – StoryTeller
事實上,'checkAlloc(...)'*將是不必要的,因爲指針的類型可以被自動推斷出來。 –
模板應該按照你想要的來做。除非不可扣除,否則在調用模板時不必指定類型。在這種情況下,您可以像使用普通功能一樣使用它。 – NathanOliver