Multipel nedarvning og dynamisk anden base
Jeg har et arkitektonisk problem i mit program. Jeg har nogle måle instrument typer, e.g. en analyser og en generator. Så har nogle konkrete måleinstrumenter, nogle analysere, nogle er generatore og helt treide er både analysere og generatore.Påp analyser og generator niveauet har jeg også filtre, og et måleinstrument der både indeholder en generator og en analyser må ikke kunne forveksles med et filter.
Når man så i koden har en opgave der skal løses med et måle instrument, e.g. en analyser, skal brugeren kunne vælge om han vil bruge en analyser eller et af de sammensatte instrumenter. Problemet er så, at det kan også være at man har brug for en generator, og til det skal man også kunne vælge et af de sammen satte.
et kode exempel:
class instrument;
class generator : public virtual instrument;
class analyser : public virtual instrument;
class sammensat : public virtual generator, virtual analyser;
class test
{
public:
analyser *a;
generator *b;
SetSammenSat(sammensat *x)
{
a = x; // Kan klart nok ikke lade sig gøre
b = x;
}
};
Hvordan løser jeg problemet smartest? Mit eneste forslag er at lade mit sammensatte instrument have referenser til de enkelte dele det indeholder, og så:
SetSammenSat(sammensat *x)
{
a = x->analyser;
b = x->generator;
}
Men det giver mig så problemet, at sammensat ikke har nedarvet fra analyser og generator, og der kan være 1000 forskellige sammensatte instrumenter, e.g. nogle kun goså indeholde filtre, osv.