2013-06-07 31 views
6

C++ project var. Projede C++ 'da yarı gerçekçi bir program oluşturma konusunda kendimi öğretmek için çalışıyorum. Bir web sitesinden içeriği tekrarlı olarak indirir.C++ İsteğe Bağlı Nesneleri Temsil Etme

Her yükleme, karşıdan yüklenecek içerik için bir URL'nin yanı sıra yönlendirenin URL'sinin (veya içeriğin çıkarıldığı sayfanın URL'sinin) bir URL'sine sahiptir.

İlk URL olmadıkça her zaman bir yönlendiren vardır. Aldatan ve sadece ilk URL'yi kendi yönlendiricisi olarak görüyordum. Kısa bir süre önce URL sınıfını boş (veya boş) bir gösterime sahip olmak için değiştirdim. Bu bir kesmek gibi geliyor.

C isteğe bağlı nesneleri göstermenin bir yolu olmadan ++ var mı:

  • işaretçiler kullanarak?
  • Geçersiz nesne için boş alan mı harcıyorsunuz?
  • veya Nesnenin "boş" bir sürümünü mi yapıyorsunuz?
+0

W \ O: İşaretçi kullanma? IMHO değil. – Najzero

cevap

5

Yükseltmeyi kullanabilirsiniz :: İsteğe bağlı. destek, saygın 3. parti kütüphanesidir; sık sık yeni stl işlevleri için bir prototip olarak kabul edilir: Ralph'in yanıtı std :: opsiyonu yeni C++ ile kullanılabilir.

bir C++ 14 derleyicisi varsa http://www.boost.org/

+0

Orijinal olarak bunu bir yorum olarak yayınladım, ancak "boş" sürüm için boş alan olmayacak mıyım? Bunun ciddi bir sorun olduğunu düşünmüyorum, ama sorunun özel gereksinimlerinden biri. – BoBTFish

+2

No. boost :: isteğe bağlı olarak, uygulamada uygun şekilde NULL olarak ayarlanmış bir işaretçi kullanır. Std :: isteğe bağlı nasıl çalıştığını bilmiyorum. – Bathsheba

+0

@Bathsheba Sadece yerleşik kuralları yeniden icat etmekten kaçınmaya çalışıyorum. 'Unique_ptr' kullandım ama kodun yanlış görünmesine karar verdim. Açıkça "bu alanın isteğe bağlı olduğunu" söylemediğini hissettim. Bunun yerine bir bellek yönetim tekniği gibi görünüyordu. –

5

, std::optional şablonu kullanın bakın. Eğer değilse boost::optional veya std::unique_ptr'u kullanabilirsiniz. Hem imleci kullanarak hem de geçersiz nesneyi boşa harcayamazsınız. std::optional, isteğe bağlı nesneyi içerecektir, std::unique_ptr açıkça işaret edecektir.

+0

+1 Sizin için Ralph: Gerçekten daha yeni bir C++ ;-)'ye geçmem gerekiyor – Bathsheba