_Общий и функции с несколькими параметрами

Я читал этот С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 не согласуется по типу при вызове этого макроса, узкий автоматически будет переведен в более широкий.

Другие вопросы по тегам