gpt4 book ai didi

c++ - 从结构中调用 Pointer-to-Member-Function 指向的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:37 24 4
gpt4 key购买 nike

我有一个具有特殊数据结构的类 TestTest 类的成员是 std::map,其中键是 std::string,映射值是 struct定义如下:

typedef struct {
void (Test::*f) (void) const;
} pmf_t;

map 初始化正常。问题是当我试图调用指向的函数时。我编了一个重现问题的玩具示例。在这里:

#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;
}

提前致谢,吉尔

最佳答案

pmf_t类型的名字是f,所以第一个改动就是去掉*得到second.f 。这为您提供了指向成员值的指针。要使用 指向成员的指针,您需要一个实例。您唯一可用的正确类型是 this,因此请将它与 ->* 运算符一起使用:

(this->*it->second.f)();

你需要在整个事情周围加上括号,否则编译器会认为你正在尝试调用 it->second.f()(这是不允许的)然后将结果应用于->*

关于c++ - 从结构中调用 Pointer-to-Member-Function 指向的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846657/

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