我有一个函数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++中,您可能会使用模板,但对于这三种不同的类型,您最终会得到三个不同的函数,并且您会使用函数重载来选择正确的版本。即使不使用模板,也可以进行重载。