Nested interface

Read Bixby rbixby at hotmail.com
Sun Apr 1 11:13:29 PDT 2012


Hm, I guess it's much simpler than that.  I must not be 
understanding something about covariance.  The following code 
produces the same error message (it has nothing to do with 
nestedness or shared classes):


interface Interface
{
	Interface getNext();
	const(Interface) getNext() const;
}

class Implementation : Interface
{
	Implementation getNext()
	{
		return null;
	}

	const(Implementation) getNext() const
	{
		return null;
	}
}


On Sunday, 1 April 2012 at 16:40:55 UTC, Read Bixby wrote:
> I was working on a small personal project, and ran across 
> something I think might (or might not) be a bug.  I'm posting 
> in this particular group just in case it's a restriction 
> somewhere that I just don't know about, or maybe just the way 
> that covariance gets resolved.  The obvious workaround is to 
> return NestedInterface from the two methods of the derived 
> class rather than NestedImplementation, but I was kind of 
> surprised it didn't compile (in the actual code, both the 
> nested interface and the nested implementation were called 
> "Node" which was stupid on my part).  I got the error message:  
> "Error: class Implementation.NestedImplementation ambiguous 
> virtual function getNext"
>
> Is this something anyone is likely to care about?
>
> shared interface Interface
> {
> 	public static shared interface NestedInterface
> 	{
> 		public shared(NestedInterface) getNext();
> 		public shared(const(NestedInterface)) getNext() const;
> 	}
> }
>
> shared class Implementation : Interface
> {
> 	public static shared class NestedImplementation : 
> Interface.NestedInterface
> 	{
> 		public override shared(NestedImplementation) getNext()
> 		{
> 			return null;
> 		}
>
> 		public override shared(const(NestedImplementation)) getNext() 
> const
> 		{
> 			return null;
> 		}
> 	}
> }




More information about the Digitalmars-d-learn mailing list