On Saturday, 31 October 2015 at 02:39:19 UTC, Tofu Ninja wrote:
On Friday, 30 October 2015 at 21:38:40 UTC, bitwise wrote:
On Thursday, 29 October 2015 at 01:14:35 UTC, Tofu Ninja wrote:
On Thursday, 29 October 2015 at 00:11:06 UTC, Tofu Ninja wrote:
[...]

Actually never mind, what I just said was basically auto override for this() so its not really any different. And it is kinda limited with some problems.

Sorry, I'm still not clear on whether or not template static this would work for you.

Personally, I don't need dynamic dispatch or per-instance access. For me, as long as class info is generated per class and stored statically, that would suffice. I could always have a base method look up what it needs at runtime by type name or something.

An example would be generating a serializer for a class in template static this to be used at runtime.

   Bit

I could make it work the same way you did, but would rather a solution that did not involve a AA lookup.

You're probably right. My main use case would be serialization which is inherently slow anyways, so I figured it wouldn't matter. I'm trying to think of how this proposal can be kept as simple as possible to maximize the chances of it being accepted, and I couldn't think of enough use cases to add value to the virtual function approach.

The more I think about it though, the more uses I come up with:

-automatic generation of toString()
-returning class specific type/serialization info
-automatic implementation of visitors!!

I don't think I have to explain the value of being able to do this:

void accept(auto this This)(Visitor v) {
    v.visit(this);
}

So I guess I'm back on the side of "auto override" functions. I would prefer a better syntax though. Maybe just "auto" like the example above instead of "auto override".... or maybe "@synthesized" in front of the function like this:

@synthesized void accept(this This)(Visitor v) {
    v.visit(this);
}

    Bit

Reply via email to