我正在维基百科上阅读C11的_Generic
示例:
#define cbrt(X) _Generic((X), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(X)
似乎很清楚如何将它用于只有一个参数的函数,但我看不到用这个系统编写带有两个(或更多)泛型参数的函数的方法。怎么可能呢?
如果某些编译器支持此功能,我会尝试一些东西,但我也找不到一个,所以我无法找到任何关于如何做到这一点的想法。
答案 0 :(得分:3)
显然,对此没有“通用”规则,它实际上取决于用例。但一个典型的用例是使用标准促销来确定一个常见的“超类型”
#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
default: pow, \
float: powf)((X), (Y))
如果X
和Y
在调用此宏时类型不一致,那么较窄的一个会自动升级到更宽的宏。