Я писал некоторые вспомогательные функции в рендеринге Android 3.0 и столкнулся с проблемой, когда пытался перегрузить встроенную функцию (даже если она была объявлена перегружаемой) или объявил функцию, которая принимает указатель .
Файл: * graphics_helper.rsh *
typedef struct color4_s {
float red;
float blue;
float green;
float alpha;
} color;
extern void __attribute__((overloadable))
rsgClearColor(color c);
Файл: * graphics_helper.rs *
inline void __attribute__((overloadable)) rsgClearColor(color c) {
rsgClearColor(c.red,c.green,c.blue,c.alpha);
}
При попытке компиляции, как указано выше, я получаю сообщение об ошибке
ошибка: неверный префикс имени функции,
"rs" зарезервировано: 'rsgClearColor'
Чтобы компилировать функцию, мне нужно изменить ее имя (например, gClearColor
). Более того, кажется, что инструменты Android жалуются, если я пытаюсь создать прототип функции, которая получает указатель на структуру. Так, например (используя ту же структуру, что и выше),
extern void __attribute__((overloadable))
gClearColor(color* c);
выдает ошибку
Не удалось экспортировать функцию
_Z11gClearColorP8color4_s. Там как минимум один параметр, тип которого не
поддерживается
отражениеRSContext :: processExport:
не удалось экспортировать func 'gClearColor'
На основе документации clang Я должен иметь возможность (а) перегружать имена встроенных функций и (б) писать перегруженные функции, которые принимают указатели, но ни одна из них не работает.