So imagine we had 2 functions (void : ( void ) )
and (std::string : (int, std::string))
and we could have 10 more. All (or some of them) take in different argument types and can return different types. We want to store them in a std::map
, so we get an API like this:
//Having a functions like:
int hello_world(std::string name, const int & number )
{
name += "!";
std::cout << "Hello, " << name << std::endl;
return number;
}
//and
void i_do_shadowed_stuff()
{
return;
}
//We want to be capable to create a map (or some type with similar API) that would hold our functional objects. like so:
myMap.insert(std::pair<std::string, fun_object>("my_method_hello", hello_world) )
myMap.insert(std::pair<std::string, fun_object>("my_void_method", i_do_shadowed_stuff) )
//And we could call tham with params if needed:
int a = myMap["my_method_hello"]("Tim", 25);
myMap["my_void_method"];
I wonder how to put many different functions into the same container. Specifically, how to do this in C++03 using Boost.
The API should be independent from the actual function types (having int a = myMap["my_method_hello"]("Tim", 25);
not int a = myMap<int, (std::string, int)>["my_method_hello"]("Tim", 25);
).
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…