toImpl deprecated, use opCast instead?

Manu turkeyman at gmail.com
Fri Jun 8 00:29:07 PDT 2012


On 7 June 2012 17:09, Jens Mueller <jens.k.mueller at gmx.de> wrote:

> Manu wrote:
> > Seriously?
> >
> > I perceive to!T and cast(T) as fundamentally different operations. How
> can
> > opCast correctly perform the role of to! ?
> > cast() is a low level type cast, to! implies a conversion of some kind.
> If
> > you have a pointer type, I assume cast to operate on the pointer, and to!
> > to perform a conversion of the thing it represents.
> >
> > to!int("12345")  or  cast(int)"12345"
> > to!JSONValue(obj)  or  cast(JSONValue)obj
> > cast(string)obj  <- appears to be a primitive cast operator, communicates
> > nothing to me about the expected format of the string produced
> >
> > The cast approach feel really wrong to me...
> >
> > I need to do conversion between some fairly complex types. to! feels
> > appropriate, but cast() just seems weird...
> > Have I missed something?
>
> I think the passage you are referring to applies only when converting
> from a user defined type to a built-in type.
> If you have user defined types only the right approach is to define a
> constructor in the target type I think.
> Something like this:
>
> struct A {}
> struct B {
>        this(A a)
>        {
>        }
> }
>
> to!B(A); // will use B's constructor
>
> I don't know what to do if you have no control over B (besides opCast or
> providing a specialized to! template).
>

I have no control over B.
I thought the idea of toImpl() was to avoid having to specialise to! ?
I generally liked the idea, except the name toImpl seems odd (what's
'implicit' about an explicit conversion function?)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120608/2806e58c/attachment.html>


More information about the Digitalmars-d mailing list