Interface problems

Mandeep Singh Brar mandeep at brars.co.in
Thu Jan 27 10:27:51 PST 2011


26.01.2011 16:54, Steven Schveighoffer пишет:
>
> This is hardly a solution.  He wants to do value comparison, not
> identity comparison.
>
> The real fix is to make interface assume it is an Object, so it can be
> implicitly cast to Object, and find another way to implement COM
> interfaces.  The COM interface "hack" is way outdated and extremely
> harmful, esp. on OS' who *don't use COM*!  I can't see how the
> benefits it has outweigh the problems it causes.
>
The recent discussion in D group about destructor order brought me to
yet another question about interfaces.
Currently, functions that should accept classes as parameters, e.g.
clear(), accept interfaces as well:

void clear(T)(T obj) if (is(T == class)) // note the constraint
{ /*...*/ }

interface I {}
class A : I {}
void main()
{
     I a = new A; // note that typeof(a) is I, not A
     clear(a);
}

This compiles. But raises a question: how come? If it is assumed that a
reference to interface is not necessarily a D class instance, then it
shouldn't. The fact that it compiles even more ambiguates the purpose
and usage of interfaces.
I agree with Steven. Having a support for COM, CORBA and so on in the
language is great, but wouldn't it be better to specify it explicitly?
Maybe solidify the usage of 'extern' keyword?

interface D {} // instances are guaranteed to be D Objects
extern interface E {} // instances may or may not be D Objects (COM and
alike)

I mean, it's already there in the language and is described in
'Interfacing to C++' in the documentation. Though currently, extern
interfaces are accepted by is(T == class) constraint as well.


Second this thought. Interface IMHO are far too basic for a functionality tweak.
Would also like to understand the way to raise such requests and take them to
their logical conclusion.

Regards
Mandeep



More information about the Digitalmars-d-learn mailing list