调用存储在std映射中的成员函数指针

时间:2013-08-30 15:06:15

标签: c++ stl function-pointers

我将地图存储在一个类中,该类将字符串作为键,并将指向成员函数的指针作为值存储。我无法调用正确的函数抛出函数指针。 这是代码:

#include <iostream>
#include <string>
#include <map>

using namespace std;


class Preprocessor;

typedef void (Preprocessor::*function)();



class Preprocessor
{

public:
    Preprocessor();
   ~Preprocessor();

   void processing(const string before_processing);

private:

   void   take_new_key();

   map<string, function>   srch_keys;

   string  after_processing;
};


Preprocessor::Preprocessor()
{
   srch_keys.insert(pair<string, function>(string("#define"), &Preprocessor::take_new_key));
}

Preprocessor::~Preprocessor()
{

}


void Preprocessor::processing(const string before_processing)
{
   map<string, function>::iterator result = srch_keys.find("#define");

   if(result != srch_keys.end())
      result->second; 
}


void Preprocessor::take_new_key()
{
   cout << "enters here";
}


int main()
{
   Preprocessor pre;
   pre.processing(string("...word #define other word"));

   return 0;
}

在函数Preprocessor::processing中,如果在地图中找到字符串,那么我调用正确的函数。问题是,在此代码中,永远不会调用Preprocessor::take_new_key

错误在哪里?

由于

2 个答案:

答案 0 :(得分:7)

正确的语法是:

(this->*(result->second))();

那很难看。所以试试吧:

auto mem = result->second;  //C++11 only
(this->*mem)();

使用哪个让你开心。

答案 1 :(得分:2)

result->second不调用函数指针。试试((*this).*result->second)();