функция — C ++ Как создать карту, которая принимает строку и возвращает функцию

Мне было интересно, если бы я мог заставить карту (в 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();
}

Любой совет будет потрясающим! Заранее спасибо.

4

Решение

Вы не можете сохранить функцию на карте — только указатель на функцию. С некоторыми другими незначительными деталями вы можете получить что-то вроде этого:

#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!, как вы, очевидно, хотели / ожидали.

4

Другие решения

Снова typedef твой друг.

typedef void (*func)();
map<string, func> commands;
2

По вопросам рекламы [email protected]