Andrei's interface requests
Jason House
jason.james.house at gmail.com
Fri Apr 3 13:59:36 PDT 2009
2786 also mentions struct using interfaces... I take it Andrei has come around on that.
I think I'd prefer for polymorphic and static/struct interfaces to be distinct from each other.
I also agree that 2785 introduces a dangerous construct when mixed with normal interfaces.
Christopher Wright Wrote:
> Andrei has put up a few enhancement requests in the bugzilla:
> http://d.puremagic.com/issues/show_bug.cgi?id=2784
> http://d.puremagic.com/issues/show_bug.cgi?id=2785
> http://d.puremagic.com/issues/show_bug.cgi?id=2786
>
> These are intended to change interfaces from being solely a tool of
> polymorphism into a way of specifying type constraints. The additions
> recommended can only be used at compile time (constructors, static
> functions, and nested types).
>
> I grant that it would be quicker and clearer to write:
> interface Foo
> {
> static void stuff();
> this (int);
> }
> template Template(Arg : Foo) {}
>
> than to write:
> template Template(Arg) if (is (typeof (new Arg(0)) &&
> isStaticFunction!(Arg, "stuff")) {}
>
> However, I'm not sure whether this would be used much at all, and it
> deserves some discussion.
>
> One detail of #2785 seems problematic:
> interface Foo
> {
> extern void bar(int, Foo, double);
> }
>
> meaning that a non-member function bar should exist that accepts an int,
> *the implementor of Foo*, and a double.
>
> This is a huge and silent divergence from the standard meaning of using
> the interface name; it would allow:
> class C : Foo
> {
> static void bar(int, C, double);
> }
>
> and disallow:
> class C : Foo
> {
> static void bar(int, Foo, double);
> }
>
> Thoughts? Any concerns that I have not raised? I don't do sufficient
> metaprogramming to find any of this useful, I admit.
More information about the Digitalmars-d
mailing list