C++ 指向函数成员的指针

C++ 指向函数成员的指针,c++,function-pointers,C++,Function Pointers,我试图用指向函数成员的指针做一些事情,但我不知道这是如何工作的 我有一个a班,看起来像这样 class A { public: float Plus (float a, float b) { return a+b; } float Minus (float a, float b) { return a-b; } float Multiply(float a, float b) { return a*b; } float Divide (floa

我试图用指向函数成员的指针做一些事情,但我不知道这是如何工作的

我有一个a班,看起来像这样

class A
{
    public:
    float Plus    (float a, float b) { return a+b; }
    float Minus   (float a, float b) { return a-b; }
    float Multiply(float a, float b) { return a*b; }
    float Divide  (float a, float b) { return a/b; }
};
A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
vector<A> vecA;
myA = &vecA[xxx]
我想声明一个指向a的指针,然后将一个指向a的一个成员的函数指针传递给另一个函数

像这样的事情:

void Will_Get_Function_Pointer(float a, float b, float (A::*pt2Func)(float, float))
{
    (...)
}
我会用这样的东西来称呼它

class A
{
    public:
    float Plus    (float a, float b) { return a+b; }
    float Minus   (float a, float b) { return a-b; }
    float Multiply(float a, float b) { return a*b; }
    float Divide  (float a, float b) { return a/b; }
};
A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
vector<A> vecA;
myA = &vecA[xxx]
我不能使用static/const成员,因为在我的最终实现中,A将指向A对象集合中的特定A,该对象的集合如下所示

class A
{
    public:
    float Plus    (float a, float b) { return a+b; }
    float Minus   (float a, float b) { return a-b; }
    float Multiply(float a, float b) { return a*b; }
    float Divide  (float a, float b) { return a/b; }
};
A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
vector<A> vecA;
myA = &vecA[xxx]
编译器告诉我使用&A::减号,但这对我不起作用

我能这样做吗

干杯

你不能。你应该使用类似于

void Will_Get_Function_Pointer(A* object, float a, float b,
float (A::*pt2Func)(float, float))
{
   (object->*pt2Func)(a, b);
}
并称之为

A* myA = new A;
Will_Get_Function_Pointer(myA, 1.00, 2.00, &A::Minus);
简单的例子


不幸的是,该语言不允许您使用该语法将对象绑定到成员函数以生成可调用对象。调用函数时,可以传入对象引用(或指针)并绑定它:

void Will_Get_Function_Pointer(float a, float b, A & obj, float (A::*pt2Func)(float, float))
{
    (obj.pt2Func)(a,b);
}

Will_Get_Function_Pointer(1.00, 2.00, myA, &A::Minus);
或者,您可以创建一个函数对象,将函数指针绑定到该对象:

void Will_Get_Function(float a, float b, std::function<float(float,float)> f)
{
    f(a,b);
}

Will_Get_Function(1.00, 2.00, std::bind(&A::Minus, &myA));
void将获得函数(浮点a、浮点b、标准::函数f)
{
f(a,b);
}
Will_Get_函数(1.00,2.00,std::bind(&A::Minus,&myA));
注意,
function
bind
在C++11中是新的;如果您使用的是旧版本的语言,Boost将提供相应的功能。

调用您的成员函数很简单,因为您需要为要调用的函数指定一个函数

float result = CALL_MEMBER_FN(*myA, pA)(a, b);

不要错过FAQ关于向成员函数声明点的并行建议:。我假设应该是
CALL_member_FN(*myA,pA)(x,y)因为,不管它的名字是什么,你的宏并不是什么都有。就我个人而言,我觉得
(myA->pA)(x,y)
的可读性要比那些乱七八糟的东西强得多。+1用于绑定-这是处理函数引用时经常用到的函数。不能使用c++11或boost。但是它的绑定语法确实非常好。