2016-04-06 32 views
5

Büyük olmaya başlayan bir C++ projem var. Dairesel bağımlılıkları olan birçok dersim olduğu bir durumla karşı karşıyayım. Ben A, B, C, D Bunu çözmek için sınıfları olduğunu varsayalım, ben sınıflara Bu dosyanın içeriği işaretçileri olacağınıC++, dairesel bağımlılığı iyi bir fikir çözmek için bir başlık oluşturuyor?

circular_dep.h adlı bir başlık dosyası oluşturduk:

class A; 
class B; 
class C; 
class D; 

Bu başlık şimdi tüm sınıflarımın başlığına dahil. Bu şekilde, derleyici yuvarlak bağımlılıkları olduğunda şikayetçi olmayı bıraktı. Ben projeye yeni bir sınıf eklemek zaman bu en iyi çözüm böyledir bana çok, ancak, ben, bunu yapmak daha kolay bir yol bulamadık

circular_dep.h eklemek gerekecek uzak. Sorum şu: Dairesel bağımlılık sorunlarıyla karşılaşabilecek projelere başvurmak iyi bir fikir mi? Yoksa bu kötü bir tasarım/kötü ya da tehlikeli bir uygulamadır mı?

+0

Dairesel referanslar iyi hep birlikte kaçınılır. Kodunuzu, ilk etapta ihtiyacınız olmayacak şekilde yeniden nasıl yapılandıracağınızı sormanız daha iyi olabilir. Ayrıca, gösterdiğiniz başlık dosyasının, sınıfların * işaretçileri * ancak (iletme) * bildirimlerini * içermediğini unutmayın. – 5gon12eder

+3

Benim tercihim, sadece başlıklara ihtiyaç duyan başlıklardaki ileriye dönük referanslara sahip olmaktı. Ama bu sadece bir tercih. Hepsini bir başlık içine koymamak için bir neden, bir ders eklediğinizde her şeyi yeniden derlemeyi engellemektir. –

+0

Kafamda, bazı durumlarda kaçınılmaz olabilir. Örneğin, C gibi görünen basit bir dil için bir derleyici yazıyorum. Bir işlevin bir bloğu vardır ('{' ve '}' arasında bir şey). Bir bloğun değişken bildirimleri ve komutları vardır ('if' gibi) ve bir komutun bir bloğu olabilir ('eğer' bir bloğa sahipse). Böylece, Command ve Block – Aleksandrus

cevap

2

Neyin var? Gördüğüm adlandırma soneki, _fwd.h/_fwd.hpp/_fwd.hxx ya da beğendiğiniz .h varyantıdır. Bunu Boost'da görebilirsiniz, örneğin: optional_fwd.hpp.

(Tabi dairesel bağımlılıkları azaltarak iyi bir hedeftir, ancak çarem yok bu yüzden bazı şeyler, grammars gibi, doğada karşılıklı-özyinelemeli değildir.)