Başlık typedefs için en iyi uygulamalar dosya | Netgez.com
SORU
1 Mart 2010, PAZARTESİ


Başlık typedefs için en iyi uygulamalar dosya

Ben kullanıyorum shared_ptr ve STL kapsamlı bir proje, ve bu lider için aşırı uzun, hata eğilimli tipler gibi shared_ptr< vector< shared_ptr<const Foo> > > (ben bir ObjC programcı tarafından tercih, uzun isimleri norm ve hala bu çok fazla.) Daha net sanırım, sürekli bu FooListPtr arayıp "" shared_ptr anlamına gelir ve "Liste" shared_ptr vektör demek. Bildiğimiz bu adlandırma belgeleyen olurdu

Bu kolay typedef, ama başlıkları ile baş ağrısına neden oluyor. FooListPtr tanımlamak için birkaç seçenek var gibi:

  • Foo.h. Bu girisim yani tüm baÅŸlıkları entwines ve ciddi sorunlar yapı oluÅŸturur.
  • FooFwd.("ileri baÅŸlık"). h Bu nedirEtkili Cöneriyor, iosfwd dayalı.h. Çok tutarlı deÄŸil, ama baÅŸlıkları sayısının iki katı tutma yükünü sinir bozucu en iyisi gibi görünüyor.
  • Ortak.sa (hepsi birlikte tek bir dosya içine koy). Bu alakasız tipleri çok entwining tarafından yeniden öldürür. Sen ÅŸimdi sadece bir nesne seçin ve baÅŸka bir proje için hareket edemiyor. Olmayan bir marÅŸ.
  • Süslü bir çeÅŸit #eÄŸer zaten typedefed getirilmemiÅŸ olsa da sihirli bir typedef tanımlayın. Yeni insanlarla kodu grok için zor oluyor sanırım çünkü iÅŸlemcisi için sonsuz bir tiksinti duyuyorum, ama belki....
  • Bir typedef yerine vektör sınıfı kullanın. Bu tehlikeli görünüyor...

En iyi uygulamalar var mı? Nasıl gerçek kodda, ne zaman tekrar kullanılabilirlik, okunabilirlik ve tutarlılık büyük önem taşımaktadır dışarı çıkarmak mı?

Eğer Diğerleri tartışma için ek seçenekler eklemek istiyorsanız bu topluluk wiki işaretledim.

CEVAP
26 EKİM 2010, Salı


common.h yöntemi kullanır gibi sesler bir proje üzerinde kaydediyorum. Çok iyi, Bu proje için çalışıyor.

Dosyası önceden derlenmiş üstbilgi ve sadece ileri-beyan olan ForwardsDecl.h tüm önemli dersleri ve gerekli typedefs denir. Bu durumda unique_ptr shared_ptr yerine kullanılır ama kullanımı benzer olmalıdır. Bu gibi görünüyor:

// Forward declarations
class ObjectA;
class ObjectB;
class ObjectC;

// List typedefs
typedef std::vector<std::unique_ptr<ObjectA>> ObjectAList;
typedef std::vector<std::unique_ptr<ObjectB>> ObjectBList;
typedef std::vector<std::unique_ptr<ObjectC>> ObjectCList;

Bu kod dersleri sadece ileri-ilan olsa bile, Visual C 2010 (tam sınıf tanımları her sınıf üstbilgi dosyası) eklemek gerek yok o kadar gerekli değil. kabul Bilmiyorum, eğer bu standart ve diğer Derleyiciler gerektirir tam sınıf tanımı, ama faydası yok: başka bir sınıf (ObjectD) bir ObjectAList Olarak Üye Olmadan ihtiyacı vardır ObjectA.h - bu gerçekten başlık Dosya bağımlılıkları azaltmaya yardımcı olabilir!

Bakım değildir, özellikle de bir sorun, çünkü ileriye tanımlamalar sadece ihtiyaç için yazılmış bir kere, ve herhangi bir sonraki değişiklikler tek ihtiyacınız olan şey tam bildiriminde sınıf üstbilgi dosyası (ve bu tetikleyici daha az kaynak dosyaların çekirdekler nedeniyle azaltılmış bağımlılıkları).

Son olarak göründüğü bu paylaşılabilir arasında projeler (denemedim kendime) çünkü bile bir proje değil aslında ilan ObjectA bir önemi yok çünkü sadece ileriye ilan etti ve eğer ki bu derleyici için fark etmez. Bu nedenle dosyasında kullanılan tüm projeler arasında sınıf adları içerebilir, ve eğer bazı belirli bir proje için eksik bir önemi yok. Tüm gerekli olan üstbilgi (*9 örneğin*), gerekli tüm beyannamekaynak(.cpp) dosyalarıaslında kullanınonlara.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • jat4011

    jat4011

    16 EKİM 2010
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011