toHash() and Interfaces

Nrgyzer nrgyzer at gmail.com
Fri May 6 13:12:44 PDT 2011


== Auszug aus Steven Schveighoffer (schveiguy at yahoo.com)'s Artikel
> On Thu, 05 May 2011 17:03:51 -0400, Nrgyzer <nrgyzer at gmail.com>
wrote:
> > Hey guys,
> >
> > I'm trying to call toHash() in a class which receives an interface
> > class as input param. But I always get "Error: no property
'toHash'
> > for type...".
> >
> > My code looks like:
> >
> > module iFBlock;
> >
> > private {
> >    import std.stream;
> > }
> >
> > interface IFBlock {
> >    public {
> >       void write(Stream);
> >    }
> > }
> >
> > module myFile;
> >
> > private {
> >    import iFBlock;
> > }
> >
> > class MyFile {
> >    private {
> >        IFBlock[hash_t] pBlocks;
> >    }
> >    public {
> >        void addBlock(IFBlock b) {
> >            pBlocks[b.toHash()] = b;
> >        }
> >    }
> > }
> >
> > Is there any chance to get the hash of the FBlock-interface?
> (cast(Object)b).toHash()
> D has this horrible notion that any interface can be for a COM
object,
> even though COM interfaces can only inherit from IUnknown (known
> statically).  Therefore, interfaces that don't inherit from
IUnknown are
> not considered Objects, even though they could and should be.
> So you have to manually cast an interface to Object in order to
call an
> Object function.
> -Steve

Ah, okay - a bit dirty solution, but it works, thanks!


More information about the Digitalmars-d-learn mailing list