writeln the struct from the alis this Example from the home page
Paul Backus
snarwin at gmail.com
Thu Nov 18 16:08:22 UTC 2021
On Thursday, 18 November 2021 at 13:51:42 UTC, Martin
Tschierschke wrote:
> Hello, if you take the example from the home page, with the
> additional last line:
>
> ```d
> struct Point
> {
> private double[2] p;
> // Forward all undefined symbols to p
> alias p this;
> double dot(Point rhs)
> {
> return p[0] * rhs.p[0] + p[1] * rhs.p[1];
> }
> }
> void main()
> {
> import std.stdio : writeln;
> // Point behaves like a `double[2]` ...
> Point p1, p2; p1 = [2, 1], p2 = [1, 1];
> assert(p1[$ - 1] == 1);
> // ... but with extended functionality
> writeln("p1 dot p2 = ", p1.dot(p2));
> // additional line:
> writeln(p1); // is not possible !
> }
> ```
> /usr/include/dmd/phobos/std/format.d(3193): Error: no []
> operator overload for type Point
> ..
> ...
>
> How to define, that for Point the same formatting should be
> used as for double[2] ?
You can define a `toString` method, like this:
```d
string toString()
{
import std.conv;
return p.to!string;
}
```
You can find more information about `toString` in the
documentation here: https://dlang.org/phobos/std_format_write.html
By the way, the reason your original version does not work is
that `p` is `private`, so `writeln` cannot access it. If you
change `p` to be `public`, it will work without a `toString`
method.
More information about the Digitalmars-d-learn
mailing list