如何让可插拔工厂与Lua配合使用?

将class data如下所示:

struct Base_data
{
public:
    Base_data(){
        protocolname = "Base";
    }
    string protocolname;
};

class HttpData : public Base_data
{
public:
    HttpData(){
        protocolname = "Http";
    }
};

将class Professor如下所示:

class Base_Professor
{
public:
    void Process(Base_data &data)
    {
        std::map::const_iterator it = ListProfessor.find(data.protocolname);
        if(it == ListProfessor.end())
            cout second->Do(data);
    }

    virtual void Do(Base_data &data){}

    virtual std::string GetProfessorname(){
        return "Base";
    }

    ~Base_Professor(){
        std::map::const_iterator it;
        for(it = ListProfessor.begin(); it != ListProfessor.end(); ++it)
            delete it->second;
    }
    bool Register(Base_Professor *Professor){
        std::map::const_iterator it = ListProfessor.find(Professor->GetProfessorname());
        if(it != ListProfessor.end())
            return false;
        ListProfessor.insert(std::make_pair(Professor->GetProfessorname(), Professor));
    }
private:
    std::map ListProfessor;
};

class HttpProfessor : public Base_Professor
{
public:
    std::string GetProfessorname(){
        return "Http";
    }
    void Do(Base_data &data){
        std::cout

我可以通过继承Base_Professor和注册新类来添加新协议,但我不知道如何在lua中实现。 你有什么好的想法吗?

原文链接 https://stackoverflow.com/questions/1992708

点赞
stackoverflow用户312586
stackoverflow用户312586

Lua 不支持“类”功能。它有一些不同的特性。

但是你可以通过使用一些功能(如表格和元表)来模拟类和继承功能。

如果你不想知道技术细节,你可以使用一些已经构建好的 Lua 库。

我创建了一个名为“MiddleClass”的库,提供了这个功能。你可以在它的LÖVE Wiki页面上找到详细说明。

除了“公有”和“私有”功能(一切都是“公有”)外,这个库提供了大部分你需要的功能。你可以在lua users wiki上找到其他库。

2010-01-10 14:25:06