Bugün, getter/setter'ı olan ve ekstra isteğe bağlı dönüşüm (casting) de yapan yani oluşturulan türe (T) göre, şöyle basit bir şey yaptım:
struct S(T)
{
private string str;
auto set(const char[] data)
=> this.str = data.idup;
auto get()
=> cast(T)this.str;
auto opCast(CastT : T)()
=> this.get;
auto toString()
=> this.str;
} unittest {
alias sType = ubyte[];
S!sType den;
den.set("test");
assert(den.toString == "test");
auto denUbyte = cast(ubyte[])den; // 1. kullanım casting yaparak
assert(denUbyte == [116, 101, 115, 116]);
assert(is(typeof(denUbyte) : sType));
assert(den.get == denUbyte); // 2. kullanım getter ile
}
Bu dizge sarması, Erdem hocamın bilgiVer() ismindeki işlevden esinlenildi.
İşte şurda:
https://forum.dlang.org/post/llhudbjnfowozxunpmuc@forum.dlang.org
Buradaki ana fikir, D'deki tür dönüşümleri ve/veya ihtiyaç duyulan durumlar. Misal, std.digest : toHexString
kolaylık işlevi sizden işaretsiz tam sayı dizisi (ubyte[]) bekliyor. Bu öyle bir işlev ki ne aralıklarla çalışıyor, ne de işinizi kolaylaştıracak önlemler alınmış.
Eğer casting veya map&array yapmazsanız kütüphanedeki olanaklar leziz değil. Tabi kendinize lezzetli bir toHex işlevi yapmanız mümkün; işaret ettiğim başlıktaki gibi.
SDB@79