Re: multiple interfaces using template method pattern
On Sat, 17 Feb 2007 03:20:55 -0600, rawhide wrote:
Using the template method pattern convention to design abstract
classes as described here(http://www.gotw.ca/publications/mill18.htm)
and here(http://www.gotw.ca/gotw/015.htm), allow for only 1 public
interface.
[snip example]
I've been playing with code trying to find a way to use this technique
while also supporting multiple public interfaces (accomplished
traditionally for me by multiple inheritance). If I could extend the
Why doesn't multiple inheritance work for you in this case? Using private
virtual functions shouldn't interfere, as far as I can see.
Can't you do something like:
class Widget
{
public:
// Stable, nonvirtual interface.
int Process( Gadget& ); // uses DoProcess...()
bool IsDone(); // uses DoIsDone()
private:
virtual int DoProcessPhase1( Gadget& );
virtual int DoProcessPhase2( Gadget& );
virtual bool DoIsDone();
};
class Updateable
{
public:
void Update(){ return DoUpdate(); }
private:
virtual void DoUpdate() = 0;
};
class StorageWidget : public Updateable, public Widget
{
private:
//Implement the Widget and Updateable functions here
int DoProcessPhase1(Gadget& );
int DoProcessPhase2(Gadget& );
bool DoIsDone();
void DoUpdate();
};
class System
{
private:
std::vector<Updateable*> updateables_;
public:
Widget* CreateStorageWidget()
{
StorageWidget* ret = new StorageWidget;
updateables_.push_back(ret);
return ret;
}
void Update()
{
for(vector<Updateable*>::iterator it = updateables_.begin();
it != updateables_.end();
++it)
(*it)->Update();
}
};
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]