Re: template classes: inheritance problem
vl106 wrote:
On 5 Feb., 15:04, Ulrich Eckhardt <eckha...@satorlaser.com> wrote:
Seeing your other posting here, I have a question: why do you insist
on using templates? AFAICT, they just don't fit your goals of
creating different objects at runtime, though I'm guessing a bit what
those goals could actually be.
Thanks for your answers. I think templates are a good solution to my
problem:
[PSEUDOCODE]
void receive_message(int messageId, char* messageData) {
Base& newMessage = Factory::create(messageId, messageData);
newMessage.process();
}
The receive_message function will stay pretty stable. If new kind of
message
is "invented" only a new specialication has to be created.
What really differs is the process method. Each specialization (based
on messageId) has ist own (and different) behaviour.
This still does not look like a situation where templates are the proper
solution.
I would go for a classic OO design and a factory method:
class Message {
public:
static auto_ptr<Message> create(int id, char* payload);
virtual void process() { throw "unknown message"; }
int getId() const { return id; }
virtual ~Message() {}
protected:
Message(int id, char* payload);
char* payload;
int id;
};
class SomeMessage : public Message {
public:
void process();
SomeMessage(int id, char* payload) : Message(id, payload) {}
};
class SomeOtherMessage : public Message {
public:
void process();
SomeOtherMessage(int id, char* payload) : Message(id, payload) {}
};
auto_ptr<Message> Message::create(int id, char* payload)
{
switch (id)
{
case 1:
return new SomeMessage(id, payload);
case 2:
return new SomeOtherMessage(id, payload);
default:
return new Message(id, payload);
}
}
When adding a new message, you only have to define a new subclass, with
the appropriate process() implementation, and update the
Message::create function to recognise the new message-id.
And there are even techniques to do the last part automatically on
program startup by letting message classes register themselves.
Bart v Ingen Schenau
--
a.c.l.l.c-c++ FAQ: http://www.comeaucomputing.com/learn/faq
c.l.c FAQ: http://c-faq.com/
c.l.c++ FAQ: http://www.parashift.com/c++-faq-lite/
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]