On Sunday, 7 May 2023 at 21:04:05 UTC, Inkrementator wrote:
Open question to everybody: What you're opinion on using opCast for this? Since it's a type conversion, it seems fitting to me.

Can't converting without explicitly specifying in D is a big shortcoming in my opinion. There is such a thing as implicitly convertion though, but it's very confusing. I don't see that simplicity in C++ in the D codes!

```CPP
#include <iostream>
using namespace std;
struct Fraction {
    int num, den;

    Fraction(int n, int d) {
        num = n;
        den = d;
    }

    // Conversion operator: return float value of fraction
    operator float() const
    {
        return float(num) / float(den);
    }
};

int main()
{
    Fraction f(2, 5);
    float val = f;
    cout << val << '\n'; // 0.4
    return 0;
}
```

You should do the same in D like this:

```d
struct Fraction {
        int num, den;

        this(int n, int d)
        {
                num = n;
                den = d;
        }

        // Cast Expression : convert float value of fraction
        auto opCast(T : float)() const
        {
                return cast(float)(num) / cast(float)(den);
        }
}

import std.stdio;

int main()
{
        auto f = Fraction(2, 5);
        float val = cast(float)f;
        val.writeln; //0.4
        return 0;
}
```

SDB@79

Reply via email to