toImpl deprecated, use opCast instead?

Jens Mueller jens.k.mueller at gmx.de
Thu Jun 7 07:09:23 PDT 2012


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).

Does this help?

Jens


More information about the Digitalmars-d mailing list