C++函数注册技术

C++函数注册技术


  • 关键字

    Lambda、函数模板、宏、预编译文件

  • 代码

    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)
    //注册函数开始
    #define AutoRegisterBegin\
            static RunRegisterFunction LINENAME(s_runRegisterFunction, __LINE__)([](){
    //注册函数结束
    #define AutoRegisterEnd\
            });\
    
  • 说明

    在函数外,通过创建静态类,执行构造函数的方法,构造函数传入一个Lambda表达式,用户实际是在Lambda表达式中完成逻辑部分,为了解决静态类名重命名的问题,使用C++的自带宏

    __LINE__   //CPP对应的行号
    

    完成静态类创建,再在外部用AutoRegisterBegin封好即可。

    static的作用域只适用于当前cpp,注意!!

  • 使用场景

    工厂模式添加新工厂时,方便在对应cpp后适用Begin和End宏,然后将新增的工厂类添加到工厂生产者类表中,完成工厂类的注册。

    更广泛一点的说,可以在一个cpp任意的位置,执行类的静态方法,单例的方法等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容