Я пишу фреймворк в C, который использует другую внешнюю библиотеку.
Мне нужно написать макрос, который преобразует определенные API-типы c (типы, предоставляемые внешним библиотека) для собственных C типов (или пользовательских типов, предоставляемых платформой).
Мой подход выглядит следующим образом:
#define my_bridge(v) _Generic((v), \
struct api_str_t: apistr2cstr(v), \
default: v \
)
Однако это вызывает некоторые ошибки, поскольку, насколько Я знаю, что каждая ветвь выбора c должна быть действительной, даже если они не оценены.
Поэтому я пришел к следующему:
#define my_bridge(v) _Generic((v), \
struct api_str_t: apistr2cstr, \
default: any \
)(v)
Который ... кажется сложным, так как я не могу написать обобщенную c функцию "any".
Есть ли решение для вышеупомянутого? Есть ли чистый и элегантный способ решить эту проблему?