Hi,
Ich habe eine Basisklasse:
1 | class Foo
|
2 | {
|
3 | public:
|
4 | virtual void process() = 0;
|
5 | }
|
nun ist es notwendig das process zu unterteilen und eine neue
Basisklasse bereitzustellen.
1 | class MultiFoo: public Foo
|
2 | {
|
3 | public:
|
4 | virtual void processA(){};
|
5 | virtual void processB(){};
|
6 | private:
|
7 | virtual void process()
|
8 | {
|
9 | if(rand()%2){
|
10 | processA();
|
11 | }else{
|
12 | processB();
|
13 | }
|
14 | };
|
15 | }
|
die Klassen, die von MultiFoo ableiten sollen aus naheliegenden Gründen
gezwungen werden, die process unangetastet zu lassen und mindestens eine
der beiden processA oder processB zu implementieren.
folgendes soll also verhindert werden:
1 | class Bar: public MultiFoo
|
2 | {
|
3 | public:
|
4 | void process(){ // hier hätte ich gerne einen compiler fehler.
|
5 | cout << 42;
|
6 | }
|
7 |
|
8 | }
|
ein verschieben von process nach private brachte leider nicht den
erhofften Erfolg. private von Foo erben kann ich leider aus anderen
Gründen nicht.
gibts sonst noch eine Möglichkeit, außer auf Goodwill der Anwender zu
hoffen, was immer kein sehr befriedigender Ansatz ist.
Gruß
Vlad