我将地图存储在一个类中,该类将字符串作为键,并将指向成员函数的指针作为值存储。我无法调用正确的函数抛出函数指针。 这是代码:
#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
。
错误在哪里?
由于
答案 0 :(得分:7)
正确的语法是:
(this->*(result->second))();
那很难看。所以试试吧:
auto mem = result->second; //C++11 only
(this->*mem)();
使用哪个让你开心。
答案 1 :(得分:2)
result->second
不调用函数指针。试试((*this).*result->second)();