And*_*ira 5 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 (float a, float b) { return a/b; }
};
Run Code Online (Sandbox Code Playgroud)
我想声明一个指向A的指针然后向另一个函数传递一个函数指针给A的一个成员.
有点喜欢这个:
void Will_Get_Function_Pointer(float a, float b, float (A::*pt2Func)(float, float))
{
(...)
}
Run Code Online (Sandbox Code Playgroud)
我会用这样的东西来称呼它
A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
Run Code Online (Sandbox Code Playgroud)
我不能使用static/const成员,因为在我的最终实现中,A将指向A对象集合中的特定A,其中的对象看起来像这样
vector<A> vecA;
myA = &vecA[xxx]
Run Code Online (Sandbox Code Playgroud)
做到这一点失败了
typedef float (A::*pA)(float x, float y);
pA p = &myA->Minus;
Run Code Online (Sandbox Code Playgroud)
编译器告诉我使用&A :: Minus,但这对我不起作用.
我甚至可以这样做吗?
干杯
A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
Run Code Online (Sandbox Code Playgroud)
你不能.你应该使用类似的东西
void Will_Get_Function_Pointer(A* object, float a, float b,
float (A::*pt2Func)(float, float))
{
(object->*pt2Func)(a, b);
}
Run Code Online (Sandbox Code Playgroud)
并称之为
A* myA = new A;
Will_Get_Function_Pointer(myA, 1.00, 2.00, &A::Minus);
Run Code Online (Sandbox Code Playgroud)
简单的例子.
http://liveworkspace.org/code/79939893695e40f1761d81ba834c5d15