gpt4 book ai didi

c++ - 调用存储在标准映射中的成员函数指针

转载 作者:太空狗 更新时间:2023-10-29 23:45:30 30 4
gpt4 key购买 nike

我将一个映射存储在一个类中,该类将字符串作为键,将指向成员函数的指针作为值。我在调用正确的函数时遇到问题抛出函数指针。这是代码:

#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

错在哪里?

谢谢

最佳答案

正确的语法是这样的:

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

太丑了。那么让我们试试这个:

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

使用让你开心的那个。

关于c++ - 调用存储在标准映射中的成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536129/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com