Re: Mix Static and dynamic Polymorphism
Jun wrote:
Hello all,
I just tried to mix static and dynamic polymorphism together.
I've a vector to store all the elements, and the implementations
of elements are slightly different. I used Policy-based design:
struct Interface{
virtual void run(void) = 0;
virtual void execute(void) = 0;
};
struct PolicyA{
void execute(){
// implementing Policy A;
}
};
Because PolicyA and Interface are two unrelated classes, the
PolicyA::execute() member will never be considered and overrider for
Interface::execute().
struct PolicyB{
void execute(){
// implementing Policy B;
}
};
template <class Policy>
struct Base : public Policy, public Interface{
void run(){
// implementing base ;
}
}
Base<T> remains an abstract class, because it does not have an overrider
for the pure-virtual member execute() that was inherited from Interface.
The most likely solutions are:
1. Add another member to Base, to connect the two inherited execute()
functions:
template <class Policy>
void Base<Policy>::execute(){
Policy::execute();
}
2. Change the inheritance hierarchy such that the policy classes inherit
from Interface.
Anyway, those codes don't compile .... Anyone has some suggestions ?
Thank you in advance.
Jun
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! ]