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