C++反射机制实现

直接上代码

#include <iostream>
#include <map>

class Base
{
public:
    virtual void hello() const = 0;
};

class A : public Base
{
public:
    A()
    {
        std::cout << "A construct" << std::endl;
    }

    void hello() const override
    {
        std::cout << "A hello" << std::endl;
    }
};

class B : public Base
{
public:
    B()
    {
        std::cout << "B construct" << std::endl;
    }

    void hello() const override
    {
        std::cout << "B hello" << std::endl;
    }
};

class BaseFactory
{
public:
    virtual Base *create() const = 0;
};

template <typename T>
class Factory : public BaseFactory
{
public:
    Base *create() const override
    {
        return new T;
    }
};

int main(int argc, char const *argv[])
{
    std::cout << "----- test basic class -----" << std::endl;
    Base *a = new A();
    a->hello();
    Base *b = new B();
    b->hello();

    std::cout << "----- test Factory class -----" << std::endl;
    BaseFactory *f = new Factory<A>;
    Base *a1 = f->create();
    a1->hello();

    std::cout << "----- test Reflection -----" << std::endl;
    std::map<std::string, BaseFactory *> factoryMap;
    factoryMap["A"] = new Factory<A>;
    factoryMap["B"] = new Factory<B>;
    factoryMap["A"]->create()->hello();
    factoryMap["B"]->create()->hello();

    return 0;
}

运行结果

posted @   爱弹钢琴的卡农  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
直接上代码运行结果
点击右上角即可分享
微信分享提示