我想使用成员函数指针调用虚函数的基类实现。
class Base {
public:
virtual void func() { cout << "base" << endl; }
};
class Derived: public Base {
public:
void func() { cout << "derived" << endl; }
void callFunc()
{
void (Base::*fp)() = &Base::func;
(this->*fp)(); // Derived::func will be called.
// In my application I store the pointer for later use,
// so I can't simply do Base::func().
}
};
在上面的代码中,将从callFunc调用func的派生类实现。有没有办法保存指向Base::func的成员函数指针,或者必须以某种方式使用using
?
在我的实际应用程序中,我使用boost::bind在callFunc中创建一个boost::function对象,稍后我使用它从程序的另一部分调用func。因此,如果boost::bind或boost::function有办法解决这个问题,也会有所帮助。
发布于 2009-07-30 17:26:34
当您通过引用或指针调用虚方法时,您将始终激活找到最多派生类型的虚调用机制。
最好的办法是添加一个非虚拟的替代函数。
发布于 2009-07-30 14:52:16
通过函数指针这样做有什么特殊的原因吗?
你应该可以这样写:
Base::func();
来调用基类实现。
发布于 2009-07-30 15:58:29
除了夸克所说的,更一般的说法是你应该使用一个信号/槽实现,而不是一个空的函数指针。Boost有一个,还有libsigc和一堆其他的。
https://stackoverflow.com/questions/1207106
复制相似问题