考虑以下代码片段。
class B {
public:
void up() {
std::cout << "up" << std::endl;
}
void down() {
std::cout << "down" << std::endl;
}
void init( void(B::*someFunc)() , void(B::*otherFunc)() ) {
m_execute = someFunc;
B* newB = new B();
m_b = newB;
m_b->m_execute = otherFunc;
}
void find() {
(this->*m_execute)();
(m_b->*m_execute)();
}
private:
void(B::*m_execute)();
B* m_b;
};
int main(){
B* b = new B();
b->init(&B::up,&B::down);
b->find();
}
我有一个类B。它的私有成员是指向B的指针m_b和函数指针。 在init()函数中,私有成员函数指针被赋值为up(),私有成员m_b的函数指针被赋值为down() 当我运行代码时,会执行两次B::up()而不是先执行B::up()再执行B::down()。
find()
的第二行,你想要的是(m_b->*(m_b->m_execute))()
吗? - Daniel Scheplerm_execute
。看起来你想写(this->*m_execute)(); (m_b->*(m_b->m_execute))();
。 - Justin