2010-03-23 24 views
6

Ben şu türüne sahip bir C++ sınıf oluşturmak istiyorum:C++ İşlev gövdesinde değişken olabilir, ancak sınıf üyesi değil mi?

  1. Bir işlev içinde bildirilebilir.
  2. Bir üye işlevinin içinde bildirilebilir.
  3. Sınıf üyesi olarak bildirilemez.

bu kullanımı: GC için düşünüyorum "Kök" nesneler.

C++ bu mümkün mü? Özellikle g ++ kullanıyorum. Argoya geçmeye istekli. Ya şablonlar veya makro çözüm ince.

Teşekkürler!

cevap

16

Sen belki bir makro ile bunu yapabileceğimi:

#define MY_TYPE \ 
    do { } while(0); \ 
    RealType 

void foo() { 
    MY_TYPE myvar; 
    myvar.Whatever(); 
} 

Bu yalnızca (nedeniyle bir işlev içinde derlemek istiyorum "... yaparken" Bit - Eğer gerçekten garip hata olacaktı gerçi mesaj). Bu, "kötülük" kullanımından kaçınmak istediğiniz makroların bir tanesi gibi görünüyor, ancak ...

+5

Oldukça yaratıcı. :) – GManNickG

+0

“MY_TYPE myvar” yapısını denerseniz ne olur? – Will

+4

Her zaman MY_TYPE const myvar' 'yapabilirdi. –

0

codeka 'un cevabını sevmeme rağmen, sorunun ne olduğunu bir deklarasyonla hayal edemiyorum. üye özniteliği.

bir GC'ın kök gibi bir şey için muhtemelen Monoid Desen kullanmak. Sınıfın tüm örnekleri aslında bir Singleton (özünde) ile ilgilidir, yani hepsi aynı durumu paylaşırlar. Bu şekilde, kaç tane örneğinin ortaya çıktığı önemli değil, hepsi aynı kaynağa işaret ediyor. Eğer döngüsel başvuruları önlemek için Böyle yaparsanız

, ben neredeyse yeterli değil korkuyorum.

struct A { boost::shared_ptr<B> mB; }; 

struct B { boost::shared_ptr<A> mA; }; 
+0

Bir şema tercüman yazdığınızı düşünün. İşlevlerin bir kısmı C dilinde yazılmıştır. Şimdi, GC herhangi bir zamanda gerçekleşebilir. Ancak, GC çalıştığında, _C_ yığınında şemaya yapılan atıfların kök nesneler olarak ele alındığından emin olmak isteriz. – anon

+0

Yani GC'nizi “Mark And Sweep” olarak uyguluyorsunuz değil mi? Yığını root olarak kullanmak bu türden alışılmış bir şeydir ... ama 200ms'den daha az bir sürede cevap vermesi gereken sunucular üzerinde çalışmak için kullanılmakta olsa da, 'neden dünyayı dondurmak' istemiyorum. Orada. –

İlgili konular