我们可以使用函数指针创建适配器模式吗?

时间:2013-10-21 10:49:00

标签: c++

我试图有一个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`?

1 个答案:

答案 0 :(得分:1)

分配成员函数指针时,为其分配 class 成员函数指针,如AdapteeTwo::Responce2中所示。

所以它应该是例如

fnptrTwo =  &AdapteeTwo::Responce2;

调用成员函数指针时使用该对象:

(pAdTwo->*fnptrTwo)()

这最后一条语句调用fnptrTwo对象中pAdTwo指向的函数,因此pAdTwo将在被调用的成员函数内this