0

私が作成している独自の GUI ライブラリのコールバック関数を登録するプリプロセッサ マクロ関数を作成しようとしています。ライブラリは、前述のマクロ機能を使用して、サードパーティが簡単に拡張できるように設計されています。

私の問題:私のマクロ関数には、許可されていないと思われる他のプリプロセッサ ディレクティブが含まれています。ユーザーが独自のウィジェットを作成し、独自のコールバック関数をメイン GUI ライブラリに登録できるように、REGISTER_CUSTOM_CALLBACK_FUNCTION をコーディングしたいと考えています。私がやろうとしていることをまだ達成する方法はありますか?

#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 
}

ユーザーが独自のウィジェットを作成し、独自のコールバック関数をメイン GUI ライブラリに登録できるように、REGISTER_CUSTOM_CALLBACK_FUNCTION をコーディングする方法はありますか?

4

0 に答える 0