는 I 매크로를 측면).는 (포인터가 객체에 대해)
SomeObject* myObj = checkAlloc(new SomeObject());
를 상기 체크 포인터 함수로서 구현된다 : 매크로로서 사용
아래와 지금
inline __device__ SomeObject* checkPointer(SomeObject* pointer, char *file, int line)
{
if (pointer == nullptr)
{
// do error logging
}
return pointer;
}
, 각각의 유형의 기능의 새로운 버전을 생성하는 것은 매우 불편 내가 할당 할 수있는 객체의 구문을 분명히하고 싶습니다. 즉, checkAlloc<SomeObject>(…)
이 아닌 각 할당 주위에 checkAlloc(…)
을 넣는 것만으로도 템플릿은 선택 사항이 아닙니다.이 템플릿은 추악하고 잘하면 불필요합니다.
inline __device__ auto checkPointer(auto pointer, char *file, int line)
을하지만 자동차 아직 함수 매개 변수에 사용할 수 없습니다 이해 :
이상적으로는이기 위하여 체크 포인터를 변경하고 싶습니다. GPU 코드는 C++ 14를 지원하므로 lambdas는 https://stackoverflow.com/a/29945034/7283981에서 읽을 수있는 잠재적 인 해결 방법으로 사용할 수 있지만이 작업을 수행하는 방법을 익히기에는 람다에 익숙하지 않습니다. 어떤 아이디어? 당신이 그것을 피하려고하는 이유
템플릿 함수에는 인수 차감 기능이 있습니다. "명확하지 않은"것은 정확히 무엇입니까? 여기 오해가 거의없는 것처럼 보입니다. – StoryTeller
실제로'checkAlloc (...)'*는 포인터 유형이 자동으로 추론 될 수 있기 때문에 불필요합니다. –
템플릿은 여기에서 원하는 것을 정확히 수행해야합니다. 연역적이지 않으면 템플릿을 호출 할 때 유형을 지정할 필요가 없습니다. 이 경우 정상적인 기능처럼 사용할 수 있습니다. – NathanOliver