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.