Обобщения для многопараметрических функций C в C11

Я понимаю универсальные C11 для однопараметрических функций, например: (изВот)

#define acos(X) _Generic((X), \
    long double complex: cacosl, \
    double complex: cacos, \
    float complex: cacosf, \
    long double: acosl, \
    float: acosf, \
    default: acos \
    )(X)

Но для функций с двумя аргументами кажется трудным, вам нужно вложить вызовы в_Genericчто действительно ужасно; Выдержка из того же блога:

#define pow(x, y) _Generic((x), \
long double complex: cpowl, \

double complex: _Generic((y), \
long double complex: cpowl, \
default: cpow), \

float complex: _Generic((y), \
long double complex: cpowl, \
double complex: cpow, \
default: cpowf), \

long double: _Generic((y), \
long double complex: cpowl, \
double complex: cpow, \
float complex: cpowf, \
default: powl), \

default: _Generic((y), \
long double complex: cpowl, \
double complex: cpow, \
float complex: cpowf, \
long double: powl, \
default: pow), \

float: _Generic((y), \
long double complex: cpowl, \
double complex: cpow, \
float complex: cpowf, \
long double: powl, \
float: powf, \
default: pow) \
)(x, y)

Есть ли способ получить более понятные человеку универсальные функции для многопараметрических функций, например, вот так:

#define plop(a,b) _Generic((a,b), \
      (int,long): plopii, \
      (double,short int): plopdd)(a,b)

Заранее спасибо за ваши ответы. Основная идея будет иметь макропакет для._Generic

Ответы на вопрос(5)

Ваш ответ на вопрос