C _具有多个参数的泛型函数和函数

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) 如何将它用于只有一个参数的函数似乎非常清楚,但我看不到用这个系统编写具有两个(或更多)泛型参数的函数的方法。怎么可能呢 如果某些编译器支持此功能,我会尝试一些方法,但

我正在阅读维基百科上C11的
\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))