On 27/03/2012 16:46, Steven Schveighoffer wrote:
<snip>
One tip -- if you are doing method as above inside a class and not an 
interface, you can use:

cast(T)cast(void*)this;

which should avoid the unnecessary dynamic cast.

Which would work if the function always returns this. But in the general case of what I'm using it for, it would call a virtual function that is meant to always return an object of the same class as this, but somebody could potentially create a subclass that breaks this rule. But I suppose I could try comparing the .classinfo in an out contract to make sure it doesn't happen....

This will *not* work in an interface. I'd
argue the compiler should be aware of the special type of T for doing casts...

What's more, given the "this T" parameter it ought to automatically treat this as being of type T within the body of the function. Essentially, semantically analyse the function when instantiated as a method of T rather than as a method of the class in which it is actually placed.

Stewart.

Reply via email to