我试图有一个Adapter类,它有一个函数指针(比如fnPtr
)。并且基于不同的Adaptee类,fnPtr
将被赋予相应的适配器功能。
以下是代码段:
class AdapteeOne
{
public:
int Responce1()
{
cout<<"Respose from One."<<endl;
return 1;
}
};
class AdapteeTwo
{
public:
int Responce2()
{
cout<<"Respose from Two."<<endl;
return 2;
}
};
class Adapter
{
public:
int (AdapteeOne::*fnptrOne)();
int (AdapteeTwo::*fnptrTwo)();
Adapter(AdapteeOne* adone)
{
pAdOne = new AdapteeOne();
fnptrOne = &(pAdOne->Responce1);
}
Adapter(AdapteeTwo adtwo)
{
pAdTwo = new AdapteeTwo();
fnptrTwo = &(pAdTwo->Responce2);
}
void AdapterExecute()
{
fnptrOne();
}
private:
AdapteeOne* pAdOne;
AdapteeTwo* pAdTwo;
};
void main()
{
Adapter* adpter = new Adapter(new AdapteeOne());
adpter->AdapterExecute();
}
现在我面临的问题是main()
功能。我没有办法调用Adapter s function pointers (
fnptrOne and
fnptrTwo`)。
我得到了:
错误C2276:'&amp;' :对绑定成员函数表达式的非法操作
以及之前的错误消息。这可能意味着&
运算符无法从pAdOne->Responce1
创建函数指针。
这是否意味着我们可以t have a function pointer in some
ClassA which could point to a non-static function present in another
ClassB`?
答案 0 :(得分:1)
分配成员函数指针时,为其分配 class 成员函数指针,如AdapteeTwo::Responce2
中所示。
所以它应该是例如
fnptrTwo = &AdapteeTwo::Responce2;
在调用成员函数指针时使用该对象:
(pAdTwo->*fnptrTwo)()
这最后一条语句调用fnptrTwo
对象中pAdTwo
指向的函数,因此pAdTwo
将在被调用的成员函数内this
。