c++ map class's in value
up vote
0
down vote
favorite
I need to make map with value of class's. Now it's look like:
if (string=="Reg") {
Registration Registration(Data);
Registration.GetResult();
}
if (string=="Auth") {
Login Login(Data);
Login.GetResult();
}
.....
and I would like to do like:
map <std::string, class_name> ClassList;
ClassList ["Reg"] = Registration;
ClassList ["Auth"] = Login;
......
ClassList [string](Data).GetResult();
Thanks for help!
c++ class
add a comment |
up vote
0
down vote
favorite
I need to make map with value of class's. Now it's look like:
if (string=="Reg") {
Registration Registration(Data);
Registration.GetResult();
}
if (string=="Auth") {
Login Login(Data);
Login.GetResult();
}
.....
and I would like to do like:
map <std::string, class_name> ClassList;
ClassList ["Reg"] = Registration;
ClassList ["Auth"] = Login;
......
ClassList [string](Data).GetResult();
Thanks for help!
c++ class
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I need to make map with value of class's. Now it's look like:
if (string=="Reg") {
Registration Registration(Data);
Registration.GetResult();
}
if (string=="Auth") {
Login Login(Data);
Login.GetResult();
}
.....
and I would like to do like:
map <std::string, class_name> ClassList;
ClassList ["Reg"] = Registration;
ClassList ["Auth"] = Login;
......
ClassList [string](Data).GetResult();
Thanks for help!
c++ class
I need to make map with value of class's. Now it's look like:
if (string=="Reg") {
Registration Registration(Data);
Registration.GetResult();
}
if (string=="Auth") {
Login Login(Data);
Login.GetResult();
}
.....
and I would like to do like:
map <std::string, class_name> ClassList;
ClassList ["Reg"] = Registration;
ClassList ["Auth"] = Login;
......
ClassList [string](Data).GetResult();
Thanks for help!
c++ class
c++ class
asked Nov 22 at 9:51
user1786639
349
349
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
4
down vote
accepted
One way is to have a (unordered?) map of functions:
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);
This can be simplified with this templated function:
template<class T>
void Handler(DataCls Data) {
T instance(Data);
instance.GetResult();
};
map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever yourData
object is.
– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
add a comment |
up vote
1
down vote
I would recommend the following inheritance hierarchy:
#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();
}
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
One way is to have a (unordered?) map of functions:
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);
This can be simplified with this templated function:
template<class T>
void Handler(DataCls Data) {
T instance(Data);
instance.GetResult();
};
map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever yourData
object is.
– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
add a comment |
up vote
4
down vote
accepted
One way is to have a (unordered?) map of functions:
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);
This can be simplified with this templated function:
template<class T>
void Handler(DataCls Data) {
T instance(Data);
instance.GetResult();
};
map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever yourData
object is.
– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
add a comment |
up vote
4
down vote
accepted
up vote
4
down vote
accepted
One way is to have a (unordered?) map of functions:
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);
This can be simplified with this templated function:
template<class T>
void Handler(DataCls Data) {
T instance(Data);
instance.GetResult();
};
map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
One way is to have a (unordered?) map of functions:
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);
This can be simplified with this templated function:
template<class T>
void Handler(DataCls Data) {
T instance(Data);
instance.GetResult();
};
map["Reg"] = Handler<Registration>;
map["Auth"] = Handler<Login>;
...
map[string](Data);
edited Nov 22 at 10:01
answered Nov 22 at 9:55
freakish
38.5k592132
38.5k592132
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever yourData
object is.
– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
add a comment |
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever yourData
object is.
– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
thanks, and how to initialize map for map["Reg"] = Handler<Registration>?
– user1786639
Nov 22 at 10:24
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
@user1786639 I'm not sure what you mean? The code I've posted should do what you are looking for, no additional initialization is needed.
– freakish
Nov 22 at 10:38
what is DataCls?
– user1786639
Nov 22 at 10:44
what is DataCls?
– user1786639
Nov 22 at 10:44
@user1786639 whatever your
Data
object is.– freakish
Nov 22 at 11:06
@user1786639 whatever your
Data
object is.– freakish
Nov 22 at 11:06
Thanks! It's work!
– user1786639
Nov 22 at 15:04
Thanks! It's work!
– user1786639
Nov 22 at 15:04
add a comment |
up vote
1
down vote
I would recommend the following inheritance hierarchy:
#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();
}
add a comment |
up vote
1
down vote
I would recommend the following inheritance hierarchy:
#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();
}
add a comment |
up vote
1
down vote
up vote
1
down vote
I would recommend the following inheritance hierarchy:
#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();
}
I would recommend the following inheritance hierarchy:
#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();
}
answered Nov 22 at 10:00
snake_style
1,049310
1,049310
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53428134%2fc-map-classs-in-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown