我正在编写一个数学库,并希望有一个类似"Add"的调用,它是泛型的,接受两个参数v1和v2,并调用正确的函数.如果v1是ve2,v2是ve2,则它将调用ve2_add,如果v1是ve2,v2是浮点数,则它将调用ve2_AddFloat.但如果v1是ve3,v2是ve3,则它将调用ve3_add等...底部画了一张小图
V1->;ve2,v2->;ve2:调用ve2_add V1->;ve2,v2->;Float:调用ve2_addFloat
V1->;ve3、v2->;ve3:调用ve3_add V1->;ve3、v2->;Float:调用ve3_addFloat
我确实编写了一个小的泛型代码,如下所示:
#define add(v1, v2) _Generic((v1), \
vec2: _Generic((v2), \
vec2: vec2_add, \
float: vec2_add_float \
), \
svec3: _Generic((v2), \
vec3: vec3_add, \
float: vec3_add_float \
) \
)(v1, v2)
由于某些原因,这对ADD_FLOAT类型有效,但当我try 将Vec2添加到Vec2或将Vec3添加到Vec3时,它给出了错误消息:
‘_Generic’ selector of type ‘vec2’ is not compatible with any association
30 | vec3: _Generic((v2), \
我到底做错了什么?