Thread overview
Sınıflar arasında dolaylı üye erişimi
Oct 19, 2012
Salih Dinçer
Oct 19, 2012
Salih Dinçer
October 19, 2012

Biliyorum...:)

Sınıflar arasında miras alma olayı olduğundan böyle bir şey gereksiz görülebilir. Bir yerde ihtiyaç duyduğum için sormak istiyorum; doğru mu yaptım?

Aşağıdaki kodda amacım kısaca şu: Kurulmuş olan sınıfın, istenildiği zaman kullanılan üyesinin (işlev) adresini temsilci (delegate) yoluyla başka bir sınıfa bildirmek. Sonuçta bu sınıf üzerinde dolaylı bir erişim söz konusu oluyor; gülmeyin...:D

import std.stdio;

class Foo
{
   int result;
   int delegate(int) func;

   this(int delegate (int) k)
   {
       this.func = k;
   }

   void exec(int x)
   {
       for(int i = 0; i < x; i++)
       {
           result = func(i);
       }
   }
}

class Bar
{
   alias recursive_func a;

   int recursive_func(int l) {
       return l ? l + a(l - 1) : 0;
   }
}

void main()
{
   auto bar = new Bar();

   foreach(n; 1..10)
   {
       auto nesne = new Foo(&bar.a);
            nesne.exec(n);
            nesne.result.write("\t");
            nesne.clear;
   }
   writeln;
}

Kod istenildiği gibi çalışıyor ama hatalarım olabilir...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 19, 2012

Ben bir gariplik görmüyorum. Özellikle eğer Bar'ın aynı tanıma uyan birden fazla temsilcisi varsa hangisinin seçildiği böyle bildirilmiş olur.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 19, 2012

Peki hocam,

this(int delegate (int) k) {
 //...

Tanımını daha genelleştirmek mümkün olabilir mi? Yani aynı sınıfı kullanarak çift parametre alan başka bir işlevi de kullanmak istesem bunu yapabilir miyiz; ya da dönüş değeri farklı olan...

Görünüşe göre yapamıyoruz ve nesne adeta parametre verilen işlev ile özelleşmiş durumda...:(

Şablon ile oldu...:)

class Foo(T)
{
   int result;
   T func;

   this(T k)
   {
       this.func = k;
   }
   :    :    :
void main()
{
   auto bar = new Bar();
   alias int delegate(int) f;

   foreach(n; 1..10)
   {
       auto nesne = new Foo!f(&bar.a);
   :    :    :

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]