Мне было интересно, если бы я мог заставить карту (в C ++) вернуть func. Это мой код сейчас, и он не работает, я получаю ошибку компилятора.
#include <map>
#include <iostream>
#include <string>
using namespace std;
map<string, void()> commands;
void method()
{
cout << "IT WORKED!";
}
void Program::Run()
{
commands["a"]();
}
Program::Program()
{
commands["a"] = method;
Run();
}
Любой совет будет потрясающим! Заранее спасибо.
Вы не можете сохранить функцию на карте — только указатель на функцию. С некоторыми другими незначительными деталями вы можете получить что-то вроде этого:
#include <map>
#include <iostream>
#include <string>
std::map<std::string, void(*)()> commands;
void method() {
std::cout << "IT WORKED!";
}
void Run() {
commands["a"]();
}
int main(){
commands["a"] = method;
Run();
}
По крайней мере, с g ++ 4.7.1, это печатает IT WORKED!
, как вы, очевидно, хотели / ожидали.
Снова typedef
твой друг.
typedef void (*func)();
map<string, func> commands;