C ++将指针传递给非静态成员函数

砧;

大家好:)我的函数指针有问题
我的“回调”函数参数是:
1)像这样的函数:int(* fx)(int,int)
2)一个int变量:int a
3)另一个int:int b
好吧,问题在于我要传递给“回调”的函数是一个非静态函数成员:(并且有很多问题,
如果比我更聪明的人有一些时间可以花,他可以看一下我的代码:)

#include <iostream>
using namespace std;

class A{
private:
    int x;
public:
    A(int elem){
        x = elem;
    }

    static int add(int a, int b){
        return a + b;
    }

    int sub(int a, int b){
        return x - (a + b);
    }
};

void callback( int(*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << fx(a, b) << endl;
}

int main()
{
A obj(5);

    //PASSING A POINTER TO A STATIC MEMBER FUNCTION -- WORKS!!
    // output = 'Value of the callback: 30'
    callback(A::add, 10, 20);

    //USING A POINTER TO A NON-STATIC MEMBER FUNCTION -- WORKS!!
    int(A::*function1)(int, int) = &A::sub;
    // output = 'Non static member: 3'
    cout << "Non static member: " << (obj.*function1)(1, 1) << endl;

    //PASSING A POINTER TO A NON-STATIC MEMBER FUNCTION -- aargh
    // fallita! tutto quello sotto non funziona --> usa i funtori???
    // puoi creare una classe wrapper ma non riuscirai mai a chiamare da callback
    int(A::*function2)(int, int) = &A::sub;
    int(*function3)(int, int) = obj.*function2; //[error] invalid use of non-static member function
    callback(function3, 1, 1);
}

有一种方法可以尝试编写指针,例如int(* fx)(int,int)=某些东西?
我进行了很多搜索,但没有人能给我答案(嗯,有一个答案:“不”,但我仍然认为我可以做点什么)

我也听说过函子,在这种情况下它们可以帮助我吗?

感谢任何人
PS:对不起,我的英语不好

EDIT1:我可以这样使用:

template <class T>
void callback2( T* obj, int(T::*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << (obj->*fx)(a, b) << endl;
}
void callback2( void* nullpointer, int(*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << fx(a, b) << endl;
}

而在我的主要:

callback2(NULL, &mul, 5, 3); // generic function, it's like: int mul(int a, int b){return a*b;}
callback2(NULL, &A::add, 5, 3); //static member function
callback2(&obj, &A::sub, 1, 1); //non static member function

我并不完全满意,因为我不想将第一个参数(对象)传递给我的“ callback2” ...
对于不理解我(糟糕)解释的人来说,问题是:我可以删除我的callback2函数中的第一个参数?
原型将是

void callback2(int(*fx)(int, int), int a, int b)<br>

我会这样称呼:

callback2(&obj.sub, 1, 3);
0x499602D2

无法通过这种方式引用函数:

int (*function3)(int, int) = obj.*function2;

您必须像这样传递函数的地址:

int (*function3)(int, int) = std::mem_fn(&A::sub, obj);
//                           ^^^^^^^^^^^^^^^^^^^^^^^^^

该表达式function2衰减为指向函数的指针,该指针使其可以工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将(非静态成员函数的)C ++函数指针传递给预定义的C函数?

来自分类Dev

C ++:为什么我可以将指针值成员变量从const成员函数传递给采用非const指针参数的外部函数?

来自分类Dev

C ++是否有定义的方法将指针传递给类的成员对象的成员函数?

来自分类Dev

将成员函数指针传递给C样式函数

来自分类Dev

将指针传递给C ++中的函数

来自分类Dev

将结构指针传递给函数c ++

来自分类Dev

C ++:将指针向量传递给函数

来自分类Dev

C ++将指针数组传递给函数

来自分类Dev

将char指针传递给C函数

来自分类Dev

C - 将指针传递给函数

来自分类Dev

C ++:如何将指针传递给另一个类的成员函数?

来自分类Dev

在不键入每个成员的情况下将struct传递给函数(C ++没有指针)

来自分类Dev

C ++:如何返回指向非静态成员函数的指针?

来自分类Dev

Boost C ++。将带有签名指针的成员函数指针传递给函数

来自分类Dev

将数组传递给函数-指针与引用(C ++与C)

来自分类Dev

将功能指针传递给非静态成员功能

来自分类Dev

C ++:将链接列表传递给静态函数

来自分类Dev

将实例方法传递给需要C函数指针的API

来自分类Dev

将字符指针数组传递给C函数

来自分类Dev

使用cgo将函数指针传递给C代码

来自分类Dev

将数组的指针传递给C中的函数

来自分类Dev

C将指针矩阵传递给函数的不同方法

来自分类Dev

C将void指针数组传递给函数

来自分类Dev

将指针传递给C中函数的困惑

来自分类Dev

C指针,了解如何将数组传递给函数

来自分类Dev

将指针传递给接受C ++中的引用的函数

来自分类Dev

将结构数组传递给函数作为指针(C)

来自分类Dev

将实例方法传递给需要C函数指针的API

来自分类Dev

将指针传递给char数组作为函数的参数-C

Related 相关文章

  1. 1

    如何将(非静态成员函数的)C ++函数指针传递给预定义的C函数?

  2. 2

    C ++:为什么我可以将指针值成员变量从const成员函数传递给采用非const指针参数的外部函数?

  3. 3

    C ++是否有定义的方法将指针传递给类的成员对象的成员函数?

  4. 4

    将成员函数指针传递给C样式函数

  5. 5

    将指针传递给C ++中的函数

  6. 6

    将结构指针传递给函数c ++

  7. 7

    C ++:将指针向量传递给函数

  8. 8

    C ++将指针数组传递给函数

  9. 9

    将char指针传递给C函数

  10. 10

    C - 将指针传递给函数

  11. 11

    C ++:如何将指针传递给另一个类的成员函数?

  12. 12

    在不键入每个成员的情况下将struct传递给函数(C ++没有指针)

  13. 13

    C ++:如何返回指向非静态成员函数的指针?

  14. 14

    Boost C ++。将带有签名指针的成员函数指针传递给函数

  15. 15

    将数组传递给函数-指针与引用(C ++与C)

  16. 16

    将功能指针传递给非静态成员功能

  17. 17

    C ++:将链接列表传递给静态函数

  18. 18

    将实例方法传递给需要C函数指针的API

  19. 19

    将字符指针数组传递给C函数

  20. 20

    使用cgo将函数指针传递给C代码

  21. 21

    将数组的指针传递给C中的函数

  22. 22

    C将指针矩阵传递给函数的不同方法

  23. 23

    C将void指针数组传递给函数

  24. 24

    将指针传递给C中函数的困惑

  25. 25

    C指针,了解如何将数组传递给函数

  26. 26

    将指针传递给接受C ++中的引用的函数

  27. 27

    将结构数组传递给函数作为指针(C)

  28. 28

    将实例方法传递给需要C函数指针的API

  29. 29

    将指针传递给char数组作为函数的参数-C

热门标签

归档