class strategy { protected: public: virtual void initialize(long *x); // set x to something; caller must call virtual long choose_time(long *x) = 0; // there was a conflict; gimme a time virtual void was_successful(long *x); // if needed, note success }; class strategy1 : public strategy { public: virtual long choose_time(long *x); }; class strategy2 : public strategy { public: virtual long choose_time(long *x); }; class strategy3 : public strategy { public: virtual long choose_time(long *x); }; class strategy4 : public strategy { public: virtual void initialize(long *x); virtual long choose_time(long *x); virtual void was_successful(long *x); }; class strategy5 : public strategy { public: virtual void initialize(long *x); virtual long choose_time(long *x); virtual void was_successful(long *x); };