C ++ 'dan Java ve C #' a geçtim ve ad alanlarının / paketlerinin kullanımının burada çok daha iyi olduğunu düşünüyorum (iyi yapılandırılmış). Sonra C ++ 'ya geri döndüm ve ad alanlarını aynı şekilde kullanmaya çalıştım ancak gerekli sözdizimi başlık dosyasında korkunç.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Aşağıdakiler de bana garip geliyor (derin girintiyi önlemek için):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Yukarıdaki şeyi ifade etmenin daha kısa bir yolu var mı? Gibi bir şey özlüyorum
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Güncelleme
Tamam, bazıları Java / C # ve C ++ 'da kullanım kavramının farklı olduğunu söylüyor. Gerçekten mi? (Dinamik) sınıf yüklemesinin ad alanlarının tek amacı olmadığını düşünüyorum (bu çok teknik gerekçeli bir bakış açısıdır). Okunabilirlik ve yapılandırma için neden kullanmayayım, örneğin "IntelliSense" i düşünün.
Şu anda, bir ad alanı ile orada bulabilecekleriniz arasında mantık / tutkal yoktur. Java ve C # bunu çok daha iyi yapar ... Neden <iostream>
ad alanı dahil edilsin ve var std
? Tamam, mantığın dahil edilecek başlığa dayanması gerektiğini söylüyorsanız, #include neden #include <std::io::stream>
veya gibi "IntelliSense" dostu bir sözdizimi kullanmıyor <std/io/stream>
? Varsayılan kitaplıklardaki eksik yapılanmanın Java / C # ile karşılaştırıldığında C ++ 'nın bir zayıflığı olduğunu düşünüyorum.
Hırslı çatışmaların benzersizliği bir Nokta ise (ki bu da C # ve Java'nın bir noktasıdır), proje adını veya şirket adını ad alanı olarak kullanmak iyi bir fikirdir, öyle değil mi?
Bir yandan C ++ 'nın en esnek olduğu söyleniyor ... ama herkes "bunu yapma" mı dedi? Bana öyle geliyor ki C ++ pek çok şey yapabilir ancak C # ile karşılaştırıldığında çoğu durumda en kolay şeyler için bile korkunç bir sözdizimine sahiptir.
Güncelleme 2
Çoğu kullanıcı, iki Düzeyden daha derin bir yuvalama oluşturmanın saçma olduğunu söylüyor. Tamam, peki ya Windows :: UI :: Xaml ve Windows :: UI :: Xaml :: Controls :: Win8 geliştirmesindeki Primitives ad alanları? Bence Microsoft'un ad alanlarını kullanması mantıklı ve gerçekten de 2 Düzeyden daha derin. Bence daha büyük kütüphaneler / projeler daha derin bir yuvaya ihtiyaç duyar (ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace gibi sınıf isimlerinden nefret ederim ... o zaman her şeyi global ad alanına da koyabilirsiniz.)
Güncelleme 3 - Sonuç
Çoğu "bunu yapma" der, ancak ... güçlendirme bile bir veya iki seviyeden daha derin bir yuvaya sahiptir. Evet, bu bir kitaplıktır ancak: Yeniden kullanılabilir kod istiyorsanız - kendi kodunuza başka birine vereceğiniz bir kitaplık gibi davranın. Ayrıca ad alanlarını kullanarak keşif amacıyla daha derin bir yuvalama kullanıyorum.
namespace
Anahtar kelimenin kötüye kullanılması mı?