我想要做的是让Execute()运行并完成它调用Base :: Done()然后调用Derived :: Done().我这样做是因为基类Execute会做一些事情,当它完成时调用Derived :: Done().我希望我能正确解释.有点像任务完成时调用的监听器.我有点坚持Base类将如何调用Derived类.
class Base { virtual void Done(int code){}; void Execute(); } void Base::Execute() { } class Derived : Base { void Done(int code); void Run(); } Derived::Done(int code) { } void Derived::Run() { Execute(); }
解决方法
您可以使用模板方法:
class Base { public: void Execute() { BaseDone(42); DoDone(42); } private: void BaseDone(int code){}; virtual void DoDone(int) = 0; }; class Derived : Base { public: void Run() { Execute(); } private: void DoDone(int code) { .... } };
这里,Base控制如何在Execute()中使用自己的派生方法和派生方法,派生类型只需要通过私有虚方法DoDone()实现该实现的一个组件.