lxg

导航

 
class IParser
{
public:
    virtual ~IParser(){}
    virtual void parse() = 0;
};
class Parser1 : public IParser
{
public:
    Parser1()
    {
        cout<<"Parser1"<<endl;
    }
    ~Parser1()
    {
        cout<<"~Parser1"<<endl;
    }
    void parse() override
    {
        cout<<"Parser1::parse"<<endl;
    }
};
Q_DECLARE_METATYPE(Parser1)
class Parser2 : public  IParser
{
public:
    Parser2()
    {
        cout<<"Parser2"<<endl;
    }
    ~Parser2()
    {
        cout<<"~Parser2"<<endl;
    }
    void parse() override
    {
        cout<<"Parser2::parse"<<endl;
    }
};
Q_DECLARE_METATYPE(Parser2)
 

 

IParser* factory(const char* parseName)
{
    int id = QMetaType::type(parseName);
    if (id == -1)
    {
        return nullptr;
    }
 
    IParser* parse = static_cast<IParser*>(QMetaType::create(id));
 
    return parse;
}
 
int main(int argc, char *argv[])
{
    qRegisterMetaType<Parser1>("Parser1");
    qRegisterMetaType<Parser2>("Parser2");
    std::shared_ptr<IParser> parse1(factory("Parser1"));
    std::shared_ptr<IParser> parse2(factory("Parser2"));
    parse1->parse();
    parse2->parse();
 
 
   return 0;
}
posted on 2020-12-18 17:55  lxg_7105  阅读(663)  评论(0编辑  收藏  举报