gpt4 book ai didi

c++ - 我可以像这样使用 mem_fun 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:22 27 4
gpt4 key购买 nike

我想在运行时设置函数指针。但我被困在这里。当我使用全局函数或静态类成员函数时,一切正常。但是,当函数是普通的类成员函数时。我总是遇到编译器错误。这是代码:

class A   
{
int val;
public:
A() { val = 0; }
A(int j) { val = j; }

int aFun(int k) {val -= k; return val; }
};

typedef int (* func)(int );
class B
{
func m_addr;
public:
B(func param)
: m_addr(param)
{

}
void execute()
{
cout << m_addr(9) << endl;
}
};

我正在尝试像这样使用它们:

/* error C2355: 'this' : can only be referenced inside non-static member functions error C2064: term does not evaluate to a function taking 1 arguments class does not define an 'operator()' or a user defined conversion operator to a pointer-to-function or reference-to-function that takes appropriate number of arguments */

A a;
B b(A::aFun);
b.execute();

在谷歌搜索了很多之后,我发现 std::mem_fun 可能会有帮助。但我不知道如何使用它。谁能帮帮我?

PS:我使用的是 Visual C++ 2010

最佳答案

类成员函数有一个由编译器传递给它的额外参数,称为 this,因此编译器将 aFun 视为 begin 声明并编写为

int A::aFun(A* this, int k)
{
this->val -= k;
return this->val;
}

静态/全局函数没有此参数,因此编译成功。

为了使用A::aFun,你需要在某处有一个类A的实例。

关于c++ - 我可以像这样使用 mem_fun 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666262/

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