C _具有多个参数的泛型函数和函数
我正在阅读维基百科上C11的C _具有多个参数的泛型函数和函数,c,generic-programming,c11,C,Generic Programming,C11,我正在阅读维基百科上C11的\u Generic示例: #define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X) 如何将它用于只有一个参数的函数似乎非常清楚,但我看不到用这个系统编写具有两个(或更多)泛型参数的函数的方法。怎么可能呢 如果某些编译器支持此功能,我会尝试一些方法,但
\u Generic
示例:
#define cbrt(X) _Generic((X), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(X)
如何将它用于只有一个参数的函数似乎非常清楚,但我看不到用这个系统编写具有两个(或更多)泛型参数的函数的方法。怎么可能呢
如果某些编译器支持此功能,我会尝试一些方法,但我也找不到,因此我找不到任何方法。显然没有“通用”规则,这取决于用例。但一个典型的用例是使用标准促销来确定一个常见的“超类型”
如果调用此宏时,
X
和Y
的类型不一致,则窄的宏会自动升级为宽的宏。哼哼,这很聪明。这就是
函数现在应该如何实现的吗?我认为这是一个想法,在语言内部有实现tgmath.h的方法。由于\u Generic
不是可选的,即使没有tgmath.h
您也知道如何实现它:)
#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
default: pow, \
float: powf)((X), (Y))