将不同类型传递给同一函数

  • 本文关键字:函数 同类型 c
  • 更新时间 :
  • 英文 :


我有一个函数sum(data(,我需要在多个函数内部调用这个函数,每次都要求和(data(不同类型的数据。我不知道如何定义函数sum(data(的参数来接受不同的类型。例如:

void sum( "what is the type here" data){
// some processing 
}
void x(){
// some processing 
//float data
sum(data);
}
void y(){
// some processing 
//int data
sum(data);
}
void z(){
// some processing 
//double data
sum(data);
}

正如我在评论中所指出的,在C中无法做到这一点。您可以使用C11中的_Generic来拥有三个明显命名的函数,例如:

  • void sum_f(float data);
  • void sum_i(int data);
  • void sum_d(double data);

映射,以便编写sum(data),但调用不同的函数。显然,您必须实现这三个函数,并确保它们已声明。然后你可以使用:

#define sum(x) _Generic((x), int: sum_i, float: sum_f, double sum_d)
void x(){
// some processing 
float data = …;
sum(data);
}
void y(void){
// some processing 
int data = …;
sum(data);
}
void z(void){
// some processing 
double data = …;
sum(data);
}

在C++中,您可能会使用模板,但对于这三种不同的类型,您最终会得到三个不同的函数,并且您会使用函数重载来选择正确的版本。即使不使用模板,也可以进行重载。

最新更新