关于自定义按钮(m_pListener->*m_clickFunc)(this)回调的问题

请问下边这段代码,随便我点击三个按钮中的任何一个,为什么返回的this对象都是最后一个btnShop呢?我想要的是当我点击btnRole时,回调函数(m_pListener->*m_clickFunc)(this);中返回的应该是btnRole;点击btnZB时,回调函数返回的this应该是btnZB,请问各位应该怎么写呢?

BaseButton是继承于public CCSprite, public CCTouchDelegate的,

BaseButton *btnRole = BaseButton::create(“btn_k.png”);
BaseButton *btnZB = BaseButton::create(“btn_zt.png”, “btn_k.png”);
BaseButton *btnShop = BaseButton::create(“btn_shop.png”, “btn_k.png”);

btnRole->setClickListener(this, callfuncO_selector(StartMenu::menuClick));
btnZB->setClickListener(this, callfuncO_selector(StartMenu::menuClick));
btnShop->setClickListener(this, callfuncO_selector(StartMenu::menuClick));

void BaseButton::setClickListener(CCObject* object, SEL_CallFuncO clickFunc)
{
m_pListener = object;
m_clickFunc = clickFunc;
}

void BaseButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){
if(m_pListener&&m_clickFunc)
(m_pListener->*m_clickFunc)(this);
}

不要沉啊,有高手回答下吗?

void BaseButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){
if(m_pListener&&m_clickFunc)
(m_pListener->*m_clickFunc)(this);
}

你看看你传递过去的参数就是this,那么你再想下,this是什么?不就是你这class本身吗? 你既然想根据不同的btn传递不同的参数 那肯定就不能传this