将字符串映射到函数

时间:2014-06-03 18:15:56

标签: c++ map

我试图这样做,但它不起作用 这是我的错误:

  

必须使用'。'或' - > '来调用指向成员的指针功能   '((test *)this) - > test :: mapping.std :: map< _Key,_Tp,_Compare,   _Alloc> :: operator [],void(test :: *)(int),std :: less>,std :: allocator,void(test :: *)(int)> > >(((常量   key_type )(& str)))(...)',例如'(... - > *   ((test *)this) - > test :: mapping.std :: map< _Key,_Tp,_Compare,   _Alloc> :: operator [],void(test :: *)(int),std :: less>,std :: allocator,void(test :: *)(int)> > >(((常量   key_type )(& str))))(...)'

test.h:

#include....
using namespace std;
class test
{
    public:
       std::map<std::string, void(test::*)(int)> mapping;
    void Add(int);
};

test.cpp:

test::test()
{
   mapping["Add"]=&test::Add;
   string str = "Add";
   this.*mapping[str](3);// dosnt work!!!!
}

void test::Add(int a)
{
   cout<<a<<endl;
}

Dosnt的工作,请帮助我。

1 个答案:

答案 0 :(得分:4)

由于this是指针,因此您需要使用->*而不是.*。此外,还需要一些括号。

(this->*mapping[str])(3);