概述
template <typename T>
struct CudaSupportedTypeImpl {
using type = T;
};
template <>
struct CudaSupportedTypeImpl<long long> {
using type = unsigned long long;
};
template <>
struct CudaSupportedTypeImpl<unsigned long> {
using type =
typename std::conditional<sizeof(unsigned long) == sizeof(unsigned int),
unsigned int, unsigned long long>::type;
};
template <>
struct CudaSupportedTypeImpl<long> {
// This cast should be safe since module-2 addition should work fine. However,
// signed overflow is not handled correctly since it's undefined behavior.
using type = typename CudaSupportedTypeImpl<unsigned long>::type;
};
template <typename T>
using CudaSupportedType = typename CudaSupportedTypeImpl<T>::type;
template <typename T>
__device__ CudaSupportedType<T>* ToCudaSupportedPtr(T* ptr) {
return reinterpret_cast<CudaSupportedType<T>*>(ptr);
}
使用:
template <typename T, typename U>
__device__ detail::ToTypeIfConvertible<U, T> GpuAtomicAdd(T* ptr, U value) {
return atomicAdd(detail::ToCudaSupportedPtr(ptr), value);
}
最后
以上就是孤独冰淇淋为你收集整理的c++ 自动转换数据类型的全部内容,希望文章能够帮你解决c++ 自动转换数据类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复