Как можно добавлять разные экземпляры структуры в функцию?
Есть у меня экземпляр структуры вида:
typedef struct{
const char str[32]; // текстовая надпись
const char numberButton[4]; // номер кнопки
const uint32_t size; // размер кнопки
const uint32_t y; // положение y координата
const uint32_t x; // положение x координата
const uint32_t TextcolF; // цвет надписи
const uint32_t TextcolB; // цвет фона
const uint32_t NumColF; // цвет цифр
const uint32_t NumColB; // цвет цифр
} const _TypeButonPressedOn;
Я делаю определение структуры:
const _TypeButonPressedOn ReadButton;
const _TypeButonPressedOn DellButton; // и так далее
Где ReadButton - это экземпляр кнопки.
Вывожу кнопку на экран кнопку с помощью функции вида:
void ButtonReadOn(void)
{
moveM(ReadButton.y,ReadButton.x);
colorM_F(ReadButton.TextcolF);
colorM_B(ReadButton.TextcolB);
addstrMenu(ReadButton.str);
writeWindow(ReadButton.y, ReadButton.x, ReadButton.TextcolF, ReadButton.TextcolB, (char*)ReadButton.str, ReadButton.size);
}
И таких функций может быть десятки штук.
Как можно сделать замену 'ReadButton' в функции 'ButtonReadOn' для упрощения работы? Создал я другую кнопку и чтобы не переделывать 'ReadButton' на 'DellButton' в каждой строчки, прописать 'DellButton' и чтобы компилятор сам заменил 'ReadButton' на 'DellButton'.
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
В си шаблоны пишутся с помощью макросов.
# define TEMPLATE_BUTTONS_FUNC( FUNC_NAME , VAR_NAME ) \
void FUNC_NAME ( void ) { \
moveM(VAR_NAME.y,VAR_NAME.x); \
colorM_F(VAR_NAME.TextcolF); \
colorM_B(VAR_NAME.TextcolB); \
addstrMenu(VAR_NAME.str); \
writeWindow(VAR_NAME.y, VAR_NAME.x, VAR_NAME.TextcolF, \
VAR_NAME.TextcolB, (char*)VAR_NAME.str, VAR_NAME.size); \
}
TEMPLATE_BUTTONS_FUNC ( ButtonReadOn , ReadButton )
TEMPLATE_BUTTONS_FUNC ( ButtonDellOn , DellButton )