2013-05-07 89 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