C++函數(shù)注冊技術

C++函數(shù)注冊技術


  • 關鍵字

    Lambda、函數(shù)模板、宏、預編譯文件

  • 代碼

    class RunRegisterFunction
    {
    public:
        template<typename T> RunRegisterFunction(const T& f){f();}
    };
    //名字合并
    #define NAMECAT(name1, name2) name1##name2
    //以cpp對應的行號
    #define LINENAME(name1, name2) NAMECAT(name1, name2)
    //注冊函數(shù)開始
    #define AutoRegisterBegin\
            static RunRegisterFunction LINENAME(s_runRegisterFunction, __LINE__)([](){
    //注冊函數(shù)結束
    #define AutoRegisterEnd\
            });\
    
  • 說明

    在函數(shù)外,通過創(chuàng)建靜態(tài)類,執(zhí)行構造函數(shù)的方法,構造函數(shù)傳入一個Lambda表達式,用戶實際是在Lambda表達式中完成邏輯部分,為了解決靜態(tài)類名重命名的問題,使用C++的自帶宏

    __LINE__   //CPP對應的行號
    

    完成靜態(tài)類創(chuàng)建,再在外部用AutoRegisterBegin封好即可。

    static的作用域只適用于當前cpp,注意?。?/p>

  • 使用場景

    工廠模式添加新工廠時,方便在對應cpp后適用Begin和End宏,然后將新增的工廠類添加到工廠生產者類表中,完成工廠類的注冊。

    更廣泛一點的說,可以在一個cpp任意的位置,執(zhí)行類的靜態(tài)方法,單例的方法等。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容