2013-05-07 44 views
2

我读维基百科这个C11的_Generic例如:_Generic和功能与几个参数

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

似乎很清楚如何与只有一个参数使用它的功能,但我看不到的方式来用这个系统写两个(或更多)通用参数的函数。这怎么可能?

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

回答

3

显然没有“通用”的规则,这实际上取决于用例。但是,一个典型的用例是使用标准的促销活动,以确定一个共同的“超”

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

如果XY调用这个宏时不会式同意,狭窄的一个将自动晋升为更宽一个。

+0

嗯,这很聪明。现在应该如何实现''函数? – Jehan 2013-05-07 13:18:54

+0

我认为这是想法之一,要在语言里面实现tgmath.h。因为'_Generic'不是可选的,即使没有'tgmath.h'你也知道如何实现它:) – 2013-05-07 14:39:48

+0

好的,谢谢所有:) – Jehan 2013-05-12 17:32:03