howto dispatch to derived classes?
Ali Çehreli
acehreli at yahoo.com
Mon Oct 14 17:47:05 PDT 2013
On 10/14/2013 02:09 PM, Manfred Nowak wrote:
>> class C{}
>> class C1:C{}
>> // ...
>> class Cn:C{}
>>
>> C getC(){ return new Cn;} // might be extern
>> // and deliver some Ci
>>
>> void visit( C1 fp){}
>> // ...
>> void visit( Cn fp){}
>> void main(){
>> visit( getC); // dispatch?
>> }
>
> -manfred
>
> visit( getC);
> }
>
>
That it not exactly the same but looks like the visitor pattern. The
actual type of the object is implicitly stored in the vtbl of each type.
So, a virtual function like accept() can do the trick:
import std.stdio;
class C{
abstract void accept();
}
class C1:C {
override void accept() { visit(this); }
}
class Cn:C{
override void accept() { visit(this); }
}
C getC(){ return new Cn;} // might be extern
// and deliver some Ci
void visit( C1 fp) {
writeln("visiting C1");
}
void visit( Cn fp){
writeln("visiting Cn");
}
void main(){
getC().accept();
}
Ali
More information about the Digitalmars-d-learn
mailing list