_Общий и функции с несколькими параметрами
Я читал этот С11 _Generic
пример в Википедии:
#define cbrt(X) _Generic((X), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(X)
Кажется довольно ясным, как использовать его для функций только с одним параметром, но я не вижу способа написать функции с двумя (или более) общими параметрами в этой системе. Как это могло быть возможно?
Я бы попробовал кое-что, если бы какой-то компилятор поддерживал эту функцию, но я тоже не смог ее найти, поэтому я не смог найти идеи, как это сделать.
1 ответ
Очевидно, что для этого нет "универсального" правила, оно действительно зависит от варианта использования. Но одним типичным вариантом использования было бы использование стандартных рекламных акций для определения общего "супертипа"
#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
default: pow, \
float: powf)((X), (Y))
Если X
а также Y
не согласуется по типу при вызове этого макроса, узкий автоматически будет переведен в более широкий.