我定义了以下数据类型:float,float4,float8,double,double4,int,int4,int8,long(64位int)和long4。假设我定义了以下函数:

void foo_float() {
  float f;
  int i;
  ...do something with f and i
}

void foo_float4() {
  float4 f;
  int4 i;
  ...do something with f and i
}

void foo_double4() {
  double4 f;
  int4 i;
  ...do something with f and i
}


说“用f和i做某事”的部分是相同的。所以我不想写重复的代码。我希望改为执行以下操作:

<float, 4>foo()


并生成函数:

void foo() {
    float4 f;
    int4 i;
    ...do something with f and i
}


有什么建议么?我可以使用模板吗?也许是定义语句和模板的组合?

最佳答案

是的,您可以将这组函数转换为单个模板函数:

template<typename float_type, typename int_type>
void foo() {
  float_type f;
  int_type i;
  ...do something with f and i
}


然后像这样使用它:

foo<float4, int4>();

09-07 04:16