C++ c++;地图类';它的价值是多少

C++ c++;地图类';它的价值是多少,c++,class,C++,Class,我需要用类的值来制作地图。现在它看起来像: if (string=="Reg") { Registration Registration(Data); Registration.GetResult(); } if (string=="Auth") { Login Login(Data); Login.GetResult(); } ..... 我想这样做: map <std::string, class_name> ClassList; ClassList ["Re

我需要用类的值来制作地图。现在它看起来像:

if (string=="Reg") {
Registration Registration(Data);
    Registration.GetResult();
}

if (string=="Auth") {
Login Login(Data);
    Login.GetResult();
}
.....
我想这样做:

map <std::string, class_name> ClassList;
ClassList ["Reg"] = Registration;
ClassList ["Auth"] = Login;

......

ClassList [string](Data).GetResult();
map类列表;
类列表[“注册”]=注册;
ClassList[“Auth”]=登录名;
......
ClassList[string](数据).GetResult();
谢谢你的帮助

一种方法是有一个(无序的?)功能图:

std::unordered_map<std::string, std::function<void(DataCls)>> map;
map["Reg"] = [](DataCls Data) {
    Registration Registration(Data);
    Registration.GetResult();
};
map["Auth"] = [](DataCls Data) {
    Login Login(Data);
    Login.GetResult();
};
...
map[string](Data);
std::无序地图;
映射[“Reg”]=[](DataCls数据){
登记(数据);
Registration.GetResult();
};
映射[“身份验证”]=[](DataCls数据){
登录(数据);
Login.GetResult();
};
...
映射[字符串](数据);
可以使用此模板化函数简化此操作:

template<class T>
void Handler(DataCls Data) {
    T instance(Data);
    instance.GetResult();
};

map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
模板
void处理程序(DataCls数据){
T实例(数据);
GetResult();
};
map[“Reg”]=处理程序;
map[“Auth”]=处理程序;
...
映射[字符串](数据);
一种方法是拥有(无序的?)功能图:

std::unordered_map<std::string, std::function<void(DataCls)>> map;
map["Reg"] = [](DataCls Data) {
    Registration Registration(Data);
    Registration.GetResult();
};
map["Auth"] = [](DataCls Data) {
    Login Login(Data);
    Login.GetResult();
};
...
map[string](Data);
std::无序地图;
映射[“Reg”]=[](DataCls数据){
登记(数据);
Registration.GetResult();
};
映射[“身份验证”]=[](DataCls数据){
登录(数据);
Login.GetResult();
};
...
映射[字符串](数据);
可以使用此模板化函数简化此操作:

template<class T>
void Handler(DataCls Data) {
    T instance(Data);
    instance.GetResult();
};

map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
模板
void处理程序(DataCls数据){
T实例(数据);
GetResult();
};
map[“Reg”]=处理程序;
map[“Auth”]=处理程序;
...
映射[字符串](数据);

我建议采用以下继承层次结构:

#include <iostream>
#include <string>
#include <map>

class IOperation
{
public:
    virtual ~IOperation(){}
    virtual int GetResult() = 0;
};

class Registration : public IOperation
{
public:
    int GetResult() override
    {
        return 1;
    }
};

class Login : public IOperation
{
public:
    int GetResult() override
    {
        return 2;
    }
};

int main()
{
    std::map<std::string, IOperation *> classList;

    classList["Reg"] = new Registration();
    classList["Auth"] = new Login();

    std::string cmd = "Auth";
    std::cout << classList[cmd]->GetResult();
}
#包括
#包括
#包括
类操作
{
公众:
虚拟~IOOperation(){}
虚拟int GetResult()=0;
};
类别注册:公开注册
{
公众:
int GetResult()重写
{
返回1;
}
};
类登录:公共操作
{
公众:
int GetResult()重写
{
返回2;
}
};
int main()
{
映射类列表;
classList[“Reg”]=新注册();
classList[“Auth”]=新登录名();
std::string cmd=“Auth”;
std::cout GetResult();
}

我建议采用以下继承层次结构:

#include <iostream>
#include <string>
#include <map>

class IOperation
{
public:
    virtual ~IOperation(){}
    virtual int GetResult() = 0;
};

class Registration : public IOperation
{
public:
    int GetResult() override
    {
        return 1;
    }
};

class Login : public IOperation
{
public:
    int GetResult() override
    {
        return 2;
    }
};

int main()
{
    std::map<std::string, IOperation *> classList;

    classList["Reg"] = new Registration();
    classList["Auth"] = new Login();

    std::string cmd = "Auth";
    std::cout << classList[cmd]->GetResult();
}
#包括
#包括
#包括
类操作
{
公众:
虚拟~IOOperation(){}
虚拟int GetResult()=0;
};
类别注册:公开注册
{
公众:
int GetResult()重写
{
返回1;
}
};
类登录:公共操作
{
公众:
int GetResult()重写
{
返回2;
}
};
int main()
{
映射类列表;
classList[“Reg”]=新注册();
classList[“Auth”]=新登录名();
std::string cmd=“Auth”;
std::cout GetResult();
}

谢谢,如何为map[“Reg”]=Handler初始化map?@user1786639我不知道你的意思是什么?我发布的代码应该满足您的需要,不需要额外的初始化。什么是DataCls?@user1786639无论您的
数据是什么都可以。谢谢,还有如何为map[“Reg”]=Handler初始化map?@user1786639我不确定您的意思?我发布的代码应该满足您的需要,不需要额外的初始化。什么是DataCls?@user1786639无论您的
数据是什么
对象。