interface function overloading

%u e at
Sun Jan 9 04:22:36 PST 2011

== Quote from bearophile (bearophileHUGS at's article
> %u:
> >   func(cast(I2)(new C()));
> That code smells a bit ( ).
> Bye,
> bearophile

Extract the construction and you get:

module main;

interface I1{}
interface I2 : I1{}

class C : I2{

void func(I1 i){}
void func(I2 i){}

void main(){
  C c = new C();
  func( cast(I2)c );

What is the deeper problem in this little snippet?
Or do you mean there is something wrong if you encounter this pattern.

I don't think it's really that much worse than renaming one(or both) of the funcs.
It forces you to cast all class:I2 objects to the func you want called, but all
class:I1 objects already call the correct func.

I think different named funcs is a better solution, but I don't think the cast
solution exemplifies a pattern of indication to a deeper problem.

More information about the Digitalmars-d-learn mailing list