Thread overview
Class içindeki değişkene class içindeki structtan erişmek
Feb 21, 2013
Salih Dinçer
Feb 24, 2013
Salih Dinçer
February 21, 2013

Hocam bir soru sormak istiyorum.

Class içinde

void*[] opcodes;

diye bir tanımlamam var.

Aynı şekilde o class içinde bir struct oluşturdum ve bu structın this fonksiyonu çağırıldığında opcodes'e erişmesini istiyorum. Bunu nasıl yapabilirim?

Error 1 Error: this for opcodes needs to be type VM not type op C:\Users\TalhaZekeriya\Documents\GitHub\Script2.0\vm.d 115

Hata bu

Struct ismim op
Class ismim ise vm

Zekeriya

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

February 21, 2013

Kod göstermediğin için anladığım kadarıyla cevap veriyorum: :)

class C
{
   void*[] opcodes;

   struct S
   {
       this(int i)
       {
           opcodes.length = 1;
       }
   }
}

void main()
{
   auto s = C.S(42);  /* Ortada opcodes diye üyesi olan hiç C yok.
                         C.S.this'in içinde 'opcodes' denen şey ne olabilir
                         ki? */
}

Derleyicinin neden kabul edemediğini de kod içine yazdım.

Böyle bir şey ancak iç sınıflarda mümkün. Ama o zaman bile iç sınıf nesnesinden oluşturabilmek için nasıl öncelikle dış nesnenin oluşturulmuş olması gerektiğine bak:

class C
{
   void*[] opcodes;

   class S
   {
       this(int i)
       {
           this.outer.opcodes.length = 1;
       }
   }
}

void main()
{
   auto c = new C();
   auto s = c.new S(42);
}

İki noktası ilginç: this.outer ve c.new.

Ali

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

February 22, 2013

Cevap için teşekkür ederim :) Ben de opcodesi dışarıda tanımladım.

Alıntı:

>

Kod göstermediğin için anladığım kadarıyla cevap veriyorum:

Kodu yayınlayacağım ama şu anki halini görmenizi istemiyorum :) Gerçekten vasat durumda :)

ama evet outer yapısı ilginç daha önce hiç böyle bir şey görmemiştim. Hızı önemli boyutta etkileyecek ise class yapılarından uzaklaşmaya çalışıyorum. Ama mutlaka bir gün işime yarayacaktır bu yapı.

Zekeriya

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

February 22, 2013

Bence miras alma olanağına ihtiyaç duymacaksak pekala işlerimizi yapılar ile görebiliriz. Sanırım bunlların sistem kaynağı kullanmada daha becerikli olduğu söylenebilir...

Bakınız en son öğrendiğim teknik ile şöyle bir şey yapabilirdik:

struct VM {
 void*[] opcodes;

 public static enum VM addresses = VM([null, null, null]);

 struct op {
   void* opcode;

   this(void* address, size_t offset) {
     this.opcode = address;
     //örneğin offset bellek uygulaması:
     foreach(i, ref opc; addresses.opcodes) {
       opc = opcode + (i * size_t.sizeof) + offset;
     }
   }
 }
} unittest {

 auto vm = VM();
 assert(vm.addresses.opcodes.length == 3);

 auto op = VM.op(&vm, 100);
 assert(op.opcode != null);

}

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

February 23, 2013

Salih hocam burada tam olarak ne yapıldığını bir türlü anlayamadım :(

Rica etsem kısaca anlatabilir misiniz?

Zekeriya

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

February 24, 2013

Burada yaptığımız, istediğimiz sayıda kurabileceğimiz bir yapı içine belli sınırlar ve kaidelerini belirlediğimiz durağan (static) bir yapı tanımlamak. Böylece bunlar abi kardeş gibi anlaşıyorlar. Yani birinin kurulması diğerinin kurulacağı anlamına geliyor. Tıpkı göbekleri aynı noktaya bağlı tek yumurta ikizleri gibi.

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

March 01, 2013

Şimdi daha iyi anladım :) Uyguladım ve sorun çıkarmadı :)

Zekeriya

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