On Sun, 19 Jun 2011 23:22:23 -0400, Jonathan M Davis <[email protected]>
wrote:
For instance, if I want to make it legal to pass a
core.time.TickDuration to
to!(core.time.Duration) instead of casting it (which is actually why
I've been
think of this issue), what is the standard way to do that? Or isn't
there one?
I'm not aware of one. And if there isn't one, how should we do it?
I can think of 3 possible ways:
1. Overload to in the module with the type being converted from. So, for
instance, core.time would have an overload for to which takes a
TickDuration
and returns a Duration (either that or std.datetime if it didn't work to
have
that in druntime for some reason). I'm not sure if that'll cause
problems with
overload sets or not though.
2. Make it so that std.conv.to can do its thing based on opCast. If a
type
overloads opCast, then std.conv.to can use that opCast to do the
conversion
(but only if opCast is defined, not for just any cast which may or may
not be
valid).
3. Make it so that user-defined types have a semi-standard member
function
(e.g. to) which std.conv.to looks for and uses for conversions if it's
there.
I vote for 3. However, it should not be called 'to', because you may want
to call to!X(y) in a member function, which would resolve to your member
to, not the global to.
-Steve