SORU
3 Ocak 2009, CUMARTESİ


::Boost dönüş değerleri için vs Yapılar Dizilerini

Dizilerini başımı almak için çalışıyorum (teşekkürler @litb) ve kendi kullanımı için ortak öneri fonksiyonlar ^ döndürmek için . 1 değer.

Bu normal bir yapı kullanmak istiyorum bir şey , ve bu durumda dizilerini avantajları anlayamıyorum - ölümcül tembel için hata eğilimli bir yaklaşım gibi görünüyor.

Borrowing an example, bunu kullanırım

struct divide_result {
    int quotient;
    int remainder;
};

Bir demet kullanarak, olurdu

typedef boost::tuple<int, int> divide_result;

Ama aradığınız işlev kodu okumadan (ya da onlara güvenmek aptalsan yorum, int bölüm olan ve tersi hakkında hiçbir fikrin yok. Daha doğrusu gibi görünüyor

struct divide_result {
    int results[2]; // 0 is quotient, 1 is remainder, I think
};

...güven bana doldurmak olmaz.

Yani, nebelirsizlik telafi ettiğini yapılar üzerinde dizilerini avantajları?

CEVAP
3 Ocak 2009, CUMARTESİ


dizilerini

Değişken ne karşılık ne sorunu karışıklık tanıtmak olabilir sana katılıyorum. Ama iki taraf var sanırım. BiridirAra-yanve diğeraranan tarafı:

int remainder; 
int quotient;
tie(quotient, remainder) = div(10, 3);

Kristal var ne olduğu belli değil sanırım, ama eğer daha fazla değer bir an önce dönün varsa kafa karıştırıcı olabilir. Arayanın programcı div, belgelerine baktım sonra neyin ne olduğunu bilir ve Etkin kod yazma. Genel bir kural olarak, en fazla 4 değerleri bir an önce dönün olmadığını söyleyebilirim. Ötesinde bir şey için, bir yapı tercih.

çıkış parametreleri

Çıkış parametreleri için çok hayırlı olabilir

int remainder; 
int quotient;
div(10, 3, "ient, &remainder);

Şimdi dizilerini çıkış parametreleri daha iyi olduğunu gösterir bence. Herhangi bir çıkar sağlamak değil iken onun çıkış div giriş karıştırılır. Daha da kötüsü, ne olabileceği hakkında şüphe kod okuyucuya bırakıyoruzgerçekdiv değerini döndürür. Yokçıkış parametreleri zaman güzel örnekler yararlıdır. Benim görüşüme göre, dönüş değeri zaten alındığı için başka bir yol var sadece bunları kullanmak gerekir, ya da bir demet veya yapı değiştirilemez. operator>> dönüş değeri zaten stream için ayrılmış olduğundan, çıkış parametreleri kullanın, operator>> aramalar zinciri böylece nerede iyi bir örnektir. Eğer yapılmaması gerektiğini operatörler ve içerik değil berrak, tavsiye ederim kullanın göstericiler, sinyal de yan nesne aslında kullanılan bir çıkış parametresi, ayrıca yorum uygun.

bir yapı dönüyor

Üçüncü seçenek bir yapı kullanmak için:

div_result d = div(10, 3);

Kesinlikle ödülü kazanır bencenetlik. Ama senden hala erişim sonucu içinde bu yapı, sonuç değil "seks çıplak" tablosu, bu durum için çıkış parametreleri ve kayıt düzeni kullanılır tie.

Önemli bir nokta, bu gün her şeyi mümkün olduğu kadar genel yapmak olduğunu düşünüyorum. Bu yüzden, dizilerini baskı bir fonksiyonu var ki. Sadece yapabilirsiniz

cout << div(10, 3);

Ve sonuç görüntülenir. Dizilerini, diğer tarafta, açıkça kendi için kazanır diye düşünüyorumçok yönlüdoğa. Div_result, aşırı yük için gereken operatör< yapıyor;< ya da her üye ayrı ayrı çıktı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005