Как использовать generi c selection для создания моста API? - PullRequest
0 голосов
/ 29 февраля 2020

Я пишу фреймворк в 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".

Есть ли решение для вышеупомянутого? Есть ли чистый и элегантный способ решить эту проблему?

...