On Thursday, 17 May 2018 at 16:27:48 UTC, Paul Backus wrote:
On Thursday, 17 May 2018 at 15:25:37 UTC, Sjoerd Nijboer wrote:
I want to make a template mixin that is able to cast one of these generic structs to the other explicitly. I have a bunch of these structs and therefore I thought it would make sense to do it by template mixin. I just don't know what language or library features I need to use and how to apply them.

It sounds like you want to overload opCast:

https://dlang.org/spec/operatoroverloading.html#cast

Something like:
`
Foo!T opCast(U)(Foo!U old)
        if (isImplicitlyConvertible!(T, U))
        {
                return Foo!T(old.t);
        }

Foo!T opCast(UTemplate, U)(UTemplate!U old)
        if (isImplicitlyConvertible!(T, U) && isNumerical!U)
        {
                return Foo!T(old.t);
        }

`
But then how do you put this into a mixin template so I can write something like
`
struct Foo(T)
        if(isNumerical(T))
{
        mixin castingRules(typeof(this) T);
}
`

Reply via email to