c++ - 使用指向成员函数的指针 C++ 将成员函数作为参数传递

标签 c++ function pointers member

我正在尝试使用 pointer-to-member-function 将成员函数作为参数传递。我已经看过一些这样的链接 here但我无法解决问题。

类 Foo 有两个成员函数。我需要将 addition 函数作为参数传递给 NewOper 函数。 这是我的代码。我可以正确地使用指针来调用 addition 函数,但是当我尝试将它作为参数传递给 NewOper 函数时它给了我一个错误。如果您告诉我如何修复它,我将不胜感激。 (最后两行导致错误)

#include <iostream>
using namespace std;
class Foo{
public:
    int addition(int a, int b)
    {
        return (a + b);
    }

    int NewOper(int x, int y, int(*fnc2call)(int, int))
    {
        int r;
        r = (*fnc2call)(x, y);
        return (r);
    }
};
int main()
{
    int m,n, k, l;
    int (Foo::*fptr) (int, int) = &Foo::addition;
    Foo obj;
    m=(obj.*fptr)(1,2);
    Foo* p = &obj;
    n=(p->*fptr)(3,4);
    cout << m << endl;
    cout << n << endl;
    //**********************
    int (Foo::*fptr) (int, int, int(*fnc2call)) = &Foo::NewOper;
    k = (obj.*fptr)(1, 2, addition);
}

最佳答案

您已经在自己的代码中有了答案:

int (Foo::*fptr) (int, int) = &Foo::addition - 此处您正确地将 fptr 声明为指向函数的指针,即(非静态)类 Foo

的成员

但是你忘了在你的 NewOper 函数定义中做同样的事情:

int NewOper(int x, int y, int(*fnc2call)(int, int)) - 此函数需要 free 函数的地址作为第三个参数。以与声明 fptr 相同的方式重新定义它。但是你还需要将指向 Foo 类对象的指针传递给这个函数

或者,您可以按照 Jarod42 的建议使您的函数 addition 函数静态化(实际上,按照现在的编写方式,没有理由让它成为类 Foo 的成员,除非您有进一步的计划在上面)。然后你需要从 fptr 定义中删除 Foo::

关于c++ - 使用指向成员函数的指针 C++ 将成员函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017762/

相关文章:

c++ - nullptr = 节点分配不正确

c++ - 类有问题。当我将两个数字相乘时,任何随机结果都会出现。

c++ - 我应该制作所有不应该改变常量的东西吗?

c++ - 使用指向函数的指针数组创建结构

javascript - 使用 REST API 的下拉列表未显示(在控制台日志中显示)

php - function_exists 返回 false 但声明抛出错误

c - 如何从存储在字节数组中的字节中检索值?

c++ - Qt:设置自定义小部件中小部件的最小大小

c++ - ROS 节点到节点持续时间

function - 如何在scala中返回一个函数