SORU
17 NİSAN 2009, Cuma


C - stil ve iyi veya kötü tarzında iç typedefs?

Son zamanlarda sık sık kendimi yaparken bulduğum bir şey typedefs bu sınıf içinde belirli bir sınıfı için ilgili ilan ediyor, yani

class Lorem
{
    typedef boost::shared_ptr<Lorem> ptr;
    typedef std::vector<Lorem::ptr>  vector;

//
// ...
//
};

Bu tür daha sonra başka bir yerde kod kullanılır:

Lorem::vector lorems;
Lorem::ptr    lorem( new Lorem() );

lorems.push_back( lorem );

Sebep bu gibi:

  • Gürültü sınıf şablonları tarafından sunulan, std::vector<Lorem> olur Lorem::vector, vb azaltır.
  • Bir niyet beyanı olarak hizmet vermektedir - yukarıdaki örnekte, Teşekkürler sınıfı boost::shared_ptr) sayılır ve bir vektör içinde saklanan referans olması amaçlanmıştır.
  • Bu kod için çok az etkisi olur uygulanmasını değiştirmek için - yani Teşekkürler intrusively referans sayılır (boost::intrusive_ptr) daha sonraki bir aşamada olması için değiştirilmesi gerekirse sağlar.
  • Bana öyle geliyor ki 'güzel' ve muhtemelen daha kolay okunur.

Beğenmedim sebep:

  • Orada bazen sorunlu bağımlılıklar - istersen göm, diyelim ki, bir Lorem::vector içerisinde başka bir sınıf, ama sadece ihtiyaç (veya istemek) için öne beyan Teşekkürler (karşıt olarak tanıtan bir bağımlılık başlığını dosya) o zaman senin olmam için kullanmak açık türleri (örneğin boost::shared_ptr<Lorem> yerine Lorem::ptr), biraz tutarsız.
  • Çok yaygın ve anlaşılması zor bu yüzden olabilir değil mi?

Benim düşüncem biraz incelemek bu da başka bir görüş almak için iyi olur kodlama tarzım ile objektif olmaya çalışıyorum.

CEVAP
17 NİSAN 2009, Cuma


Mükemmel bir tarzı olduğunu düşünüyorum, ve ben de ondan kullanıyorum. Her zaman en iyi isimleri kapsamını mümkün olduğunca sınırlamak ve sınıfları C bunu yapmak için en iyi yoldur . Örneğin, Standart C kitaplığı sınıflar içinde typedefs yoğun kullanımını yapar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011