4

マップ (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

2 に答える 2

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!明らかに望んでいた/期待したように、これは出力されます。

于 2012-10-23T03:07:56.447 に答える
2

再びtypedefあなたの友人です。

typedef void (*func)();
map<string, func> commands;
于 2012-10-23T03:10:31.473 に答える