_Generic和具有多个参数的函数

时间:2013-05-07 12:46:51

标签: c generic-programming c11

我正在维基百科上阅读C11的_Generic示例:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                          default: cbrt, \
                          float: cbrtf)(X)

似乎很清楚如何将它用于只有一个参数的函数,但我看不到用这个系统编写带有两个(或更多)泛型参数的函数的方法。怎么可能呢?

如果某些编译器支持此功能,我会尝试一些东西,但我也找不到一个,所以我无法找到任何关于如何做到这一点的想法。

1 个答案:

答案 0 :(得分:3)

显然,对此没有“通用”规则,它实际上取决于用例。但一个典型的用例是使用标准促销来确定一个常见的“超类型”

#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
                          default: pow,                \
                          float: powf)((X), (Y))

如果XY在调用此宏时类型不一致,那么较窄的一个会自动升级到更宽的宏。