Thread overview
Determining whether something is an interface?
Nov 12, 2007
Christopher Wright
Nov 12, 2007
torhu
Nov 12, 2007
Daniel Keep
Nov 13, 2007
Christopher Wright
Nov 13, 2007
BCS
November 12, 2007
You can determine whether a type is a class:
is (T : Object)

There's no equivalent for interfaces. You can use the compiles trait:
__traits(compiles, class Something : T {})
Except you can't -- it only takes expressions, not declarations.

There are traits for abstract classes (interfaces aren't) and final classes; how about something for interfaces? Or should I just start using abstract classes instead?
November 12, 2007
Christopher Wright wrote:
> You can determine whether a type is a class:
> is (T : Object)
> 
> There's no equivalent for interfaces. You can use the compiles trait:
> __traits(compiles, class Something : T {})
> Except you can't -- it only takes expressions, not declarations.
> 
> There are traits for abstract classes (interfaces aren't) and final classes; how about something for interfaces? Or should I just start using abstract classes instead?

Doesn't this work?  It's legal syntax, so I suppose it does what you want.

is(foo == interface)
November 12, 2007

Christopher Wright wrote:
> You can determine whether a type is a class:
> is (T : Object)
> 
> There's no equivalent for interfaces. You can use the compiles trait:
> __traits(compiles, class Something : T {})
> Except you can't -- it only takes expressions, not declarations.
> 
> There are traits for abstract classes (interfaces aren't) and final classes; how about something for interfaces? Or should I just start using abstract classes instead?

Have you tried is( T == interface ) ?

	-- Daniel
November 13, 2007
Daniel Keep wrote:
> 
> Christopher Wright wrote:
>> You can determine whether a type is a class:
>> is (T : Object)
>>
>> There's no equivalent for interfaces. You can use the compiles trait:
>> __traits(compiles, class Something : T {})
>> Except you can't -- it only takes expressions, not declarations.
>>
>> There are traits for abstract classes (interfaces aren't) and final
>> classes; how about something for interfaces? Or should I just start
>> using abstract classes instead?
> 
> Have you tried is( T == interface ) ?
> 
> 	-- Daniel

No, I haven't. `interface` isn't a type, so it didn't occur to me to try that. Thank you, and thank torhu.
November 13, 2007
Reply to Christopher,

> Daniel Keep wrote:
> 
>> Christopher Wright wrote:
>> 
>>> You can determine whether a type is a class:
>>> is (T : Object)
>>> There's no equivalent for interfaces. You can use the compiles
>>> trait:
>>> __traits(compiles, class Something : T {})
>>> Except you can't -- it only takes expressions, not declarations.
>>> There are traits for abstract classes (interfaces aren't) and final
>>> classes; how about something for interfaces? Or should I just start
>>> using abstract classes instead?
>>> 
>> Have you tried is( T == interface ) ?
>> 
>> -- Daniel
>> 
> No, I haven't. `interface` isn't a type, so it didn't occur to me to
> try that. Thank you, and thank torhu.
> 

the full list of things you can do is at:

http://www.digitalmars.com/d/1.0/expression.html#IsExpression