Test
独特のデータ構造を持つクラスがあります。クラスのメンバーTest
はastd::map
であり、キーはastd::string
であり、マップされた値はstruct
次のように定義されます。
typedef struct {
void (Test::*f) (void) const;
} pmf_t;
マップの初期化はOKです。問題は、指定された関数を呼び出そうとしているときです。問題を再現したおもちゃの例を作りました。ここにあります:
#include <iostream>
#include <map>
using namespace std;
class Test;
typedef void (Test::*F) (void) const;
typedef struct {
F f;
} pmf_t;
class Test
{
public:
Test () {
pmf_t pmf = {
&Test::Func
};
m["key"] = pmf;
}
void Func (void) const {
cout << "test" << endl;
}
void CallFunc (void) {
std::map<std::string, pmf_t>::iterator it = m.begin ();
((*it).second.*f) (); // offending line
}
std::map<std::string, pmf_t> m;
};
int main ()
{
Test t;
t.CallFunc ();
return 0;
}
よろしくお願いします、ジル