Ваш код Python фактически переводит на C ++ почти напрямую:
# Python:
# Create a dictionary mapping strings to functions
methods = { "foo" : foo, "bar" : bar }
// C++:
// create a map, mapping strings to functions (function pointers, specifically)
std::map<std::string, void(*)()> methods;
methods["foo"] = foo;
methods["bar"] = bar;
# Python
choice = input("foo or bar? ")
// C++:
std::string choice;
std::cout << "foo or bar? ";
std::cin >> choice;
# Python:
methods[choice]()
// C++
methods[choice]();
Словарь Python похож на map
в C ++. Оба они являются ассоциативными контейнерами, отображающими значение из одного типа в значение другого (в нашем случае, строка в функцию).
В C ++ функции не являются первоклассными гражданами, поэтому вы не можете сохранить функцию на карте, но вы можете сохранить указатель на функцию. Следовательно, определение карты становится немного затруднительным, потому что мы должны указать, что типом значения является «указатель на функцию, которая не принимает аргументов и возвращает void».
В дополнение к этому предполагается, что все ваши функции имеют одинаковую подпись. Мы не можем хранить как функции, которые возвращают void, так и функции, которые возвращают int, в одной и той же карте без дополнительных хитростей.