原文
嗨,我想为结构
自定义toString
实现.
所以,为此写了一个插件
:
import std.traits : FieldNameTuple;
import std.format : FormatSpec;
import std.conv : to;
import std.range : put;
private mixin template StructToString(S)
{
void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt)
{
put(sink, typeid(S).toString);
put(sink, "(\n");
foreach (index, name; FieldNameTuple!S)
{
put(sink, " ");
put(sink, name);
put(sink, ": ");
put(sink, this.tupleof[index].to!string);
put(sink, ",\n");
}
put(sink, ")");
}
}
我觉得已有库提供了类似(为结构和类
实现toString
的各种方法),但我找不到.
问题是:
以上是完成的"好"方法吗?
是否有库(甚至是Phobos
中的某些内容)已提供了一些mixin
或等效功能?
在我看来还不错
.我会做些小的改动
,比如使用typeof(this)
而不是S
来引用要插件
的结构类型
,但整体方法
很好.