SORU
2 HAZİRAN 2011, PERŞEMBE


'demet' ve 'kravat ile karşılaştırma operatörleri uygulama', iyi bir fikir mi?

(NOT: tuple tie Artırma veya C 11. alınabilir)
Yazı yazarken küçük yapılar ile yalnızca iki öğe, bazen eğilimindedir seçimi için std::pair, gibi tüm önemli şeyler zaten yaptığım için bu veri türü, gibi operator< katı-zayıf-sipariş.
Bu olumsuzlukları olsa hoş çok yararsız değişken isimleri. Eğer ben kendimi typedef 2 gün sonra first ne hatırlamayacağım ve second tam olarak ne yarattıysa bile, özellikle eğer aynı türden iseler de. Bu pairs oldukça berbat ikiden fazla üye için daha da kötüsü, iç içe geçmiş olur.
Bunun için diğer seçeneği tuple, baskının ya da C gerçekten hiç hoş görünmüyor 11, ama bir ve daha nettir. Geri yapılar kendimi, gerekli karşılaştırma operatörleri gibi yazmak için gittim.
operator< özellikle oldukça hantal olabilir bu yana, sadece işlemleri tuple tanımlanmış güvenerek bu karmaşayı engellemeyi düşündüm:

Örnek katı-zayıf-sipariş için operator<, örneğin:

bool operator<(MyStruct const& lhs, MyStruct const& rhs){
  return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
         std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}

(tie geçirilen bağımsız değişkenleri tuple T& bir başvuru yapar.)


Edit: @Özel olarak miras tuple için DeadMG gelen öneri kötü biri değil, ama oldukça bazı sakıncaları var:

  • Eğer operatörler free-standing (muhtemelen arkadaşları) ise, alenen devralmak istiyorum
  • Döküm ile, fonksiyonları / operatörleri (operator= özellikle) kolayca yan yol olabilir
  • tie çözüm, sipariş için onların önemi yok ama bazı üyeleri ihmal etmem

Düşünmem gereken bu uygulamada herhangi bir dezavantajı var mı?

CEVAP
2 HAZİRAN 2011, PERŞEMBE


Bu kesinlikle daha kolay kendiniz çalışırken daha doğru bir operatör yazmak için gidiyor. Söylersen profil karşılaştırma uygulamanın zaman alıcı bir parçası olmak için operasyon gösteriyorsa farklı bir yaklaşım olacağını düşünüyorum. Aksi takdirde bu bakımı kolay Olası performans kaygıları ağır basar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • infiniTuts

    infiniTuts

    18 Ocak 2012
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011