通过typedefs
来定位不同浮点精度(float / double)的常用方法typedef float Real;
//typedef double Real;
或使用模板
template<typename Real>
...
这很方便,但是任何人都有想法如何使用CUDA类型float2 / float3 / ...和make_float2 / make_float3 / ...?当然,我可以为所有人制作#defines或typedef,但这看起来不是很优雅。
答案 0 :(得分:5)
您可以实现将连接类型和通道编号的辅助类:
template <typename T, int cn> struct MakeVec;
template <> struct MakeVec<float, 3>
{
typedef float3 type;
};
template <> struct MakeVec<double, 3>
{
typedef double3 type;
};
// and so on for all combination of T and cn
用法:
template <typename T>
void func()
{
typedef typename MakeVec<T, 4>::type vec4_type;
vec4_type vec4; // for T=float it will be float4, for T=double it will be double4
}
您可以找到实施here