toString best practices
Paolo Invernizzi
paolo.invernizzi at gmail.com
Thu Feb 9 17:49:58 UTC 2023
Hello everybody,
Let's assume there's an implementation of a templated struct like
this:
```
import std.format, std.range.primitives;
struct Point(T)
{
T x, y;
void toString(W)(ref W writer, scope const ref
FormatSpec!char f) const
if (isOutputRange!(W, char))
{
put(writer, "(");
formatValue(writer, x, f);
put(writer, ", ");
formatValue(writer, y, f);
put(writer, ")");
}
}
void main(){
import std.format : format;
assert( format("%s", Point!int(1,2)) == "(1, 2)");
import std.experimental.logger;
sharedLog.infof("%s", Point!int(1,2));
/+
Error: none of the overloads of template
`std.logger.core.Logger.memLogFunctions!LogLevel.info.logImplf`
are callable using argument types `!()(string, Point!int) shared`
/Users/pinver/dlang/dmd-2.102.0/osx/bin/../../src/phobos/std/logger/core.d(828,14): Candidates are: `logImplf(int line = __LINE__, string file = __FILE__, string funcName = __FUNCTION__, string prettyFuncName = __PRETTY_FUNCTION__, string moduleName = __MODULE__, A...)(lazy bool condition, lazy string msg, lazy A args)`
/Users/pinver/dlang/dmd-2.102.0/osx/bin/../../src/phobos/std/logger/core.d(876,14): `logImplf(int line = __LINE__, string file = __FILE__, string funcName = __FUNCTION__, string prettyFuncName = __PRETTY_FUNCTION__, string moduleName = __MODULE__, A...)(lazy string msg, lazy A args)`
+/
}
```
What is the best way to handle also shared writers?
Thank you all,
Paolo
More information about the Digitalmars-d-learn
mailing list