Fully dynamic d by opDotExp overloading
Steven Schveighoffer
schveiguy at yahoo.com
Sat Apr 18 18:33:58 PDT 2009
On Sat, 18 Apr 2009 14:05:30 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Steven Schveighoffer wrote:
>> I gave this a lot of thought, and I think here is a possible solution:
>> the main reason I'm hesitant on this idea is because of code like this:
>> class X
>> {
>> auto opDotExp(string fname, T...)(T args)
>> {
>> if(fname == "blah")
>> return foo(args);
>> else if(fname == "blither")
>> return bar(args);
>> // else, nothing happens
>> }
>> }
>> Which leaves code open to lots of compiled code that doesn't do the
>> right thing (or throws some runtime exception). What would be nice is
>> if the default behavior is what statically bound functions do, that is,
>> compile error, and only let the cases be handled which the author
>> expects to handle.
>
> class X
> {
> auto opDotExp(string fname, T...)(T args)
> {
> static if(fname == "blah")
> return foo(args);
> else static if(fname == "blither")
> return bar(args);
> else static assert(0, "Dunno how to "~fname);
> }
> }
Yeah, I get that it can be done manually. What I'm suggesting is that the
compiler makes sure the static assert occurs if thbe result of compiling
the template instance results in an empty function. I look at it like
adding methods to a class, you don't have to define which methods are not
valid, all methods are by default invalid, only the ones you define are
allowed. With opDotExp, you are forced to define not only which calls to
it are valid, but which ones aren't. I'm saying, don't require defining
which ones aren't, just like if you wanted to add methods to a class. I'm
sure I'm not explaining this perfectly...
For example, the swizzle example that has been brought up many times, you
want to handle 256 possible method names, but there are an infinite number
of method names. You don't care about defining what to do in all
situations, only in the situations you care about. But without compiler
help, you have to.
-Steve
More information about the Digitalmars-d
mailing list