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无论您的数据是什么
对象。