2

C++ には、次のような多くの関数 (1 つ、2 つ、3 つ...) があります。

int MyClass::one(Mynamespace::Data* data)
{
    //do something
    return 0;
}

また、関数ポインターを使用して 1 つ、2 つ、3 つ... の関数を呼び出すために使用したいアクション関数もあります。

int MyClass::action(Mynamespace::Data* data)
{
    int (*actionFunction)(Mynamespace::Data*);
    actionFunction = data->name; // the name is a string with the function name (one, two, three...)
    return (*actionFunction)(data);

}

私が得るエラーは言う:

int (MyClass::)(Mynamespace::Data*)’ does not match ‘int (*)(Mynamespace::Data*)

私は何を間違っていますか?これをすばやく簡単に行う別の方法があれば、それも学びたいと思います。ありがとうございました

4

2 に答える 2

4

関数名を関数アドレスにマップするテーブルが必要です。タイプの変数を使用し
std::map<std::string, int (MyClass::*)(Mynamespace::Data*)>て保持できます。

ParaShift C++ faq には、メンバー関数へのポインターの配列に関する記事があり、これはより複雑であるため、これを試みる前に完全に理解する必要があります。

于 2013-07-05T08:03:33.323 に答える