On Monday, 11 June 2012 at 18:19:21 UTC, Manu wrote:
On 10 June 2012 03:42, Jonathan M Davis <[email protected]> wrote:

On Sunday, June 10, 2012 02:26:36 timotheecour wrote:
What is the recommended approach when we have no control over classes A or B (cf from 3rd party) to convert A to B? It seems UFCS doesn't work in that case. Could you please provide an example code? Thanks!

If you want to convert between two types and you don't control the definitions of either, and neither of them have any functions which will convert from one to the (including constructors, opCast, etc.), then you're just going to have to write a function to do it. It's not gonig to work with std.conv.to or casting, but you can write such a function just like you can write any other function.

A convertBToA(B b) {...}

I don't think that there's anything else that you _can_ do.


That's very problematic for generic programming :/

Is there any way to do implicit conversion? Or a specific call based on the object just being 'called'?

As an experiment I've been trying to make a small Int struct that basically will fail if it hasn't been initialized, but I get stuck; I don't want to have to call a separate function since the Int will get lowered during release code to int, but if you use 'alias value this;', then it bypasses any other checks that might be present when you use it as an int.

 Here's sorta my incomplete version, you should get the idea...

struct MustInitializeFirst(T)
if (isNumeric!(T)) {
  bool beenSet;
  T value;

  T opAssign(T set) {
    beenSet = true;
    return value;
  }

  //not sure what to use, so opAccess a holder for now
  T opAccess() {
    assert(beenSet);
    return value;
  }
}

alias MustInitializeFirst!int Int;

Reply via email to