February 22

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