由类名创建对象

#pragma once

#include "shengli_tool/template_map_str.h"
using namespace SHENGLI::TOOLS;

// 用于声明具有动态创建功能的基类
#define DECLARE_DYNCRT_BASE(base) /
public: /
    typedef base* (*ClassGen)(); /
    static void Register(const char* class_name, ClassGen class_gen) /
    { /
        MapStr<base::ClassGen>& class_set = base::get_class_set();/
        class_set.Set(class_name, class_gen);/
    } /
public:/
    static base* Create(const char* class_name) /
    { /
        base::ClassGen pfun;/
        MapStr<base::ClassGen>& class_set = base::get_class_set();/
        if (class_set.Find(class_name, pfun))/
        {/
            return (pfun)();/
        }/
        return NULL; /
    }/
protected: /
    static MapStr<base::ClassGen>& get_class_set()/
    { /
        static MapStr<base::ClassGen> class_set; /
        return map_set;/
    }/

// 用于实现基类
#define IMPLEMENT_DYNCRT_BASE(base)
    
// 用于声明一个能够被动态创建的类
#define DECLARE_DYNCRT_CLASS(derived, base) /
public: /
    struct derived##Register /
    { /
        derived##Register() /
        { /
            static bool bRegistered = false; /
            if(!bRegistered) /
            {/
                base::Register(#derived, Create); /
                bRegistered = true; /
            } /
        } /
    }; /
    static base* Create() /
    { /
        return new derived; /
    }

// 用于实现一个能够被动态创建的类  
#define IMPLEMENT_DYNCRT_CLASS(derived) /
static derived::derived##Register derived##_for_registering;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值