Макро-функция препроцессора, которая позволяет расширять библиотеку GUI
Я пытаюсь создать макрос-функцию препроцессора, которая регистрирует функции обратного вызова для моей собственной библиотеки графического интерфейса, которую я делаю. Библиотека предназначена для легкого расширения третьими лицами с помощью функции Macro, упомянутой выше.
Моя проблема: моя макро-функция включает в себя другие директивы препроцессора, которые, я думаю, недопустимы. Я хочу закодировать мой REGISTER_CUSTOM_CALLBACK_FUNCTION таким образом, чтобы пользователь мог создавать свои собственные виджеты и регистрировать свою собственную функцию обратного вызова в основной библиотеке GUI. Любые идеи, как я все еще могу достичь того, что я пытаюсь сделать?
#define FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) Integer callbackFunctName(Draw_Box& window, Integer windowIndex, Integer id, Text cmd, Text msg);
#define REGISTER_CUSTOM_CALLBACK_FUNCTION(callbackFunctName) \
#ifndef CUSTOM_CALLBACK_1 \
#define CUSTOM_CALLBACK_1 \
FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) \
#elif !defined CUSTOM_CALLBACK_2 \
#define CUSTOM_CALLBACK_2 \
FORWARD_DECLARE_CALLBACK_FUNCTION(callbackFunctName) \
#endif
// Intended Usage: In a customers code they will be able to create their own
// Widgets with their own Window Callback functions like this...
REGISTER_CUSTOM_CALLBACK_FUNCTION(progressBarCallback)
... some other code
REGISTER_CUSTOM_CALLBACK_FUNCTION(hyperlinkCallback)
Вот обратный вызов главного окна, который вызывается на каждом тактовом шаге:
Integer main_callback(Draw_Box& window, Integer windowIndex, Integer id, Text cmd, Text msg)
{
#ifdef CUSTOM_CALLBACK_1
CUSTOM_CALLBACK_1(window, windowIndex, id, cmd, msg);
#endif
#ifdef CUSTOM_CALLBACK_2
CUSTOM_CALLBACK_2(window, windowIndex, id, cmd, msg);
#endif
}
Любые идеи, как я мог бы кодировать мой REGISTER_CUSTOM_CALLBACK_FUNCTION, чтобы позволить пользователю создавать свои собственные виджеты и зарегистрировать свою собственную функцию обратного вызова в основной библиотеке GUI?