[Issue 1023] New: Struct implementing interfaces and struct member enumeration

Downs default_357-line at yahoo.de
Thu Mar 8 02:40:52 PST 2007


Downs schrieb:
> d-bugmail at puremagic.com schrieb:
>> http://d.puremagic.com/issues/show_bug.cgi?id=1023
>>
>>            Summary: Struct implementing interfaces and struct member
>>                     enumeration
>>            Product: D
>>            Version: unspecified
>>           Platform: All
>>         OS/Version: All
>>             Status: NEW
>>           Severity: enhancement
>>           Priority: P2
>>          Component: DMD
>>         AssignedTo: bugzilla at digitalmars.com
>>         ReportedBy: larsivar at igesund.net
>>
>>
>> Structs in D are very simple which is good, but in some cases they are 
>> just
>> too simple. In many cases you would want to handle struct instances as if
>> they were Object derivates, by calling methods on them, methods that
>> implement an interface. The most obvious example is toUtf8 (or toString).
>> As it is now, for instance in a formatter, if it detects that the 
>> input is
>> a struct, you have no way of figuring out whether the struct 
>> implements an
>> interface or not.
>>
>> This is thus a request to make it possible to say that a struct 
>> implements
>> an interface and thus can be typeid'ed on other types (interfaces) than
>> those of the structs themselves. An enumeration of the methods of the
>> struct would also be nice.
>>
>> I started a thread in the NG out of old habit, but I think this is the 
>> more
>> correct place.
>>
>>
> Consider the following code.
> 
> import std.stdio, std.traits;
> 
> struct a { void test() { } }
> struct b { void Test() { } }
> struct c { int Test() { return 0; } }
> 
> void test(T)() {
>   T t=void;
>   static if (is(typeof(t.Test)==function)) {
>     writefln(T.mangleof, " has Test, returns ", 
> typeid(ReturnType!(t.Test)));
>   }
>   else writefln(T.mangleof, " lacks Test");
> }
> 
> void main() {
>   test!(a); test!(b); test!(c);
> }
> 
> Thus, we can check if a struct implements a series of functions, and 
> check their return values and the parameters they take.
> Does that come close to what you need?
>   greetings --downs

Nevermind, I see what he means.
And I agree, more typeinfo for structs would be a good thing, especially for using with the new mixin syntax.


More information about the Digitalmars-d-bugs mailing list