[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